将c_str()赋值给字符串

时间:2013-05-22 09:57:26

标签: c++ c string strcmp c-str

我遇到了一个我无法自行解决的问题。

string filenameRaw;
filenameRaw= argv[1];
function(filenameRaw.c_str(),...);

function(const char* rawDataFile,const char* targetfieldFile,const char* resultFile,const char* filename)
...
this->IOPaths.rawData=rawDataFile;
...
到目前为止,

工作得非常好。现在我尝试在变量IOPaths.rawData ...

中放入另一个字符串
function(const char* rawDataFile,const char* targetfieldFile,const char* resultFile,const char* filename)
...
string filenameRaw;
filenameRaw=reader.Get("paths", "rawData", "UNKNOWN")
...
const char* rawDataFile1=filenameRaw.c_str();
cout << "Compare: " << strcmp(rawDataFile,rawDataFile1) <<endl;
...
this->IOPaths.rawData=rawDataFile1;

这不再适用了。后来在我的程序中,我得到了文件名错误。 strcmp肯定给出0,所以字符串必须相等。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:3)

c_str()输出的有效性最多仅限于调用c_str()的对象的生命周期。 1

我怀疑this->IOPaths.rawDatafilenameRaw超出范围时指向已释放的内存。

一个充分的补救方法是传递std :: string而不是[const] char*。一个好的stl实现会对字符串类使用copy on write语义,所以也许你不会重复复制字符串数据。


1 在某些情况下(例如,如果对象被修改),它可能会更少。