我想写一个c ++函数,它将float转换为const char*.在此函数中,传递一个参数以指定输出值应表示的小数位.我已经提出了这个功能,它运行良好.
我想是否有更好的方法来编写这个函数?
static const char* getString(float value, int decimalPlaces)
{
char strValue[sizeof value];
sprintf(strValue, "%.%df", value, decimalPlaces);
return strValue;
}
Run Code Online (Sandbox Code Playgroud)
您的功能有两个主要问题.
首先float是大多数平台上的四个字节的大小,这意味着你的数组只有四个元素.对于浮点值的所有数字都不够.写出界限将导致未定义的行为.
第二个问题是您返回一个指向局部变量的指针.strValue一旦函数返回,数组将超出范围,指针现在将成为所谓的杂散指针.取消引用它也会导致未定义的行为.
总之,你的功能也没有 "很好的工作".它根本不起作用.
显而易见的解决方案是使用std::string和std::to_string将浮点值转换为字符串.然后当你需要一个C风格的以null结尾的字符串(无论出于何种原因)时,你使用字符串c_str()成员函数来获得这样的指针.
如果需要特定的小数位数,请使用std::ostringstream标准I/O操纵器以您希望的方式格式化字符串.如果您的目标是获取输出字符串,您当然可以跳过此步骤,并在编写输出时直接使用操纵器.