簡體   English   中英

將c_str()賦值給字符串

[英]assignment of c_str() to a string

我有一個問題,我不能自己解決。

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實現會對字符串類使用copy on write語義,所以也許你不會重復復制字符串數據。


1在某些情況下(例如,如果對象被修改),它可能會更少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM