1

我有一个我自己无法解决的问题。

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,因此字符串必须相等。有谁知道我做错了什么?

4

1 回答 1

3

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

我怀疑这this->IOPaths.rawData是指向释放的内存一旦filenameRaw超出范围。

一个适当的补救措施是传递 std::string 而不是[const] char*. 一个好的 stl 实现会为字符串类使用写时复制语义,因此您可能不会重复复制字符串数据。


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

于 2013-05-22T09:59:54.270 回答