如何解决如何在C++中将双变量转换为char数组?
我正在为学校做一个项目,我们刚刚发现 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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。