如何在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;
}