问题描述
我正在为学校做一个项目,我们刚刚发现 outtextxy()
(来自 graphics.h 的函数,我们必须使用)需要作为文本参数 a 字符数组。
这是它的声明:void outtextxy (int x,int y,char *textstring)
问题是我们需要打印出一些type double
,包括小数点。我之前曾尝试使用来自其他类似问题的知识使其发挥作用,但都没有奏效。
这是我最近的尝试,结果出现了分段错误:
char *DoubletoString(long double x)
{
char s[256]="\000";
std::ostringstream strs;
strs << x;
string ss = strs.str();
for(int i=0; i < ss.length(); i++)
s[i] = ss[i];
return s;
}
注意:我对编程还是有点陌生,我不完全知道 ostringstream
和看起来像 bitshift 的操作在做什么,但我尝试复制粘贴那部分希望它能奏效。
解决方法
... 需要一个字符数组作为文本参数。
好的,然后使用 std::string
:
std::string DoubleToString(long double x)
{
std::ostringstream strs;
strs << x;
return strs.str();
}
如果您需要底层字符数组,请使用 strings data()
方法。它确实返回一个指向字符串字符数组第一个元素的指针。例如:
std::string s = DoubleToString(3.141);
function_that_needs_pointer_to_char( s.data() );
请注意,在 C++17 之前,data
返回了一个 const char*
(并且从 C++11 开始,字符数组以空字符结尾,正如人们所期望的那样;)。
我知道这是未定义的行为,但它有效。并且我只需要将返回的 char*
传递给 outtextxy()
,稍后不再操作它,因为我将 double
变量存储在一个对象中。
char *DoubleToString(long double x)
{
char s[256]="\000";
std::ostringstream strs;
strs << x;
string sd = strs.str();
strcpy(s,sd.data());
return s;
}