我无法将int
转换为c字符串(const char*
):
int filenameIndex = 1;
stringstream temp_str;
temp_str<<(fileNameIndex);
const char* cstr2 = temp_str.str().c_str();
没有错误,但cstr2
未达到预期值。它用一些地址初始化。
出了什么问题,如何解决?
答案 0 :(得分:5)
temp_str.str()
返回一个临时对象,该对象在语句结束时被销毁。因此,cstr2
指向的地址无效。
相反,请使用:
int filenameIndex = 1;
stringstream temp_str;
temp_str<<(filenameIndex);
std::string str = temp_str.str();
const char* cstr2 = str.c_str();
答案 1 :(得分:5)
temp_str.str()
是一个临时的string
值,在语句结束时被销毁。 cstr2
是一个悬空指针,当它指向的数组被字符串的破坏删除时无效。
如果你想保持指向它的指针,你需要一个非临时字符串:
string str = temp_str().str(); // lives as long as the current block
const char* cstr2 = str.c_str(); // valid as long as "str" lives
Modern C ++也有更方便的字符串转换功能:
string str = std::to_string(fileNameIndex);
const char* cstr2 = str.c_str(); // if you really want a C-style pointer
同样,这会按值返回string
,因此请勿尝试cstr2 = to_string(...).c_str()