我需要将数字转换为字符串并将其存储到const char*
中,但问题是const char*
变量在赋值后为空。
在以下示例代码中,我希望看到数字输出已转换为const char*
#include <iostream>
#include <string>
int main()
{
int number = 123;
const char* ptr_num_string = std::to_string(number).c_str();
std::cout << "number to string is: " << ptr_num_string << std::endl;
std::cin.get();
return 0;
}
输出为空白:
字符串的编号是:
如何将数字转换为const char *?
答案 0 :(得分:6)
std::to_string
返回临时 std::string
。const
本身上进行的任何非string
操作都会使std::string::c_str
返回的指针无效-这是因为它基本上为您提供了指向string
'的指针的内部缓冲区。std::string
绝对是非const
的操作!因此,您不能指望将指针指向string
返回的to_string
,并且永远无法使用它。您首先需要保存该string
的副本:
int number = 123;
std::string const numAsString = std::to_string(number);
char const* ptrToNumString = numAsString.c_str(); // use this as long as numAsString is alive
您正在做的事情称为Undefined Behaviour-这意味着您的程序无效,并且任何事情都可能发生。它可能会崩溃,可能会打印出一些垃圾,它似乎可以正常工作,每次您运行程序时都可以执行其中的一种操作……
答案 1 :(得分:1)
它不是“空白”,它指向超出范围的字符串缓冲区。因此,访问它会导致未定义的行为。您需要使字符串保持活动状态:
auto str{std::to_string(number)};
auto ptr_num_string{str.c_str()};
std::cout << "number to string is: " << ptr_num_string << std::endl;