gpt4 book ai didi

c++ - 将 c_str() 分配给字符串

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:12 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

适当的补救措施是传递 std::string 而不是 [const] char*。一个好的 STL 实现会为字符串类使用写时复制语义,这样也许您就不会重复复制字符串数据。


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

关于c++ - 将 c_str() 分配给字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16688862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com