【发布时间】:2020-12-23 20:25:45
【问题描述】:
我正在为学校做一个项目,我们刚刚发现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 和看起来像移位的操作在做什么,但我试图复制粘贴那部分,希望它的工作。
【问题讨论】:
-
return s;您正在返回一个局部变量的地址。未定义的行为。为什么不直接返回std::string? -
要添加到@Paul 所说的内容,然后您将获取返回的字符串(称为
str),然后调用outtextxy(x, y, str.c_str()) -
您想将双精度数转换为其 c 字符串表示,对吗?
double(10.125)的值应该以字符数组{'1', '0', '.', '1', '2', '5', '\0'}结尾,对吗? -
outtextxy(x,y,(char*)to_string(your_double).c_str());我觉得你可以这样用 -
@AndreiLoghin, 在任何情况下都不要返回一个指向局部变量的指针!! 鼻恶魔会发生,你的奶牛只会喂变质的牛奶等等!!从函数返回后,变量不再存在,内存可能用于其他目的。如果它似乎起作用,那只是运气不好。如果程序立即崩溃这样你就没有滴答作响的炸弹,那就更好了。您应该返回一个
std::string并调用outtextxy,并按照上面评论中显示的@qqq 进行转换。
标签: char double c++98 decimal-point