从int到c-string(const char *)的转换失败

时间:2014-09-15 13:06:22

标签: c++ string pointers type-conversion cstring

我无法将int转换为c字符串(const char*):

int filenameIndex = 1;      
stringstream temp_str;
temp_str<<(fileNameIndex);
const char* cstr2 = temp_str.str().c_str();    

没有错误,但cstr2未达到预期值。它用一些地址初始化。

出了什么问题,如何解决?

2 个答案:

答案 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();

DEMO

答案 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()