對於奇怪的行爲我有一個糟糕的幾天。我有一個std ::字符串,我使用+ =操作符來添加另一個字符串(實際上是附加到路徑的文件的名稱)。當我運行程序時,我發現文件沒有找到。之後的大量cout顯示我正在將文件名添加到字符串的開頭。std :: string + =運算符
std::string path("/home/me/location/");
std::string file("file.txt");
path += file;
std::cout << path.c_str();
這個輸出是「file.txt/location」!!!我已經嘗試了一個簡單的程序,它只是將兩個字符串加在一起,並且正常工作正常(gcc v 4.3)。我已經從Windows機器上覆制了代碼,除了新文件路徑之外,我並沒有期待任何問題,它只是真正使用STL並且直接執行,實際上它或多或少地第一次編譯。以防萬一,我跑了dos2unix。現在我有點難倒了,但是我之前並沒有真正複製過代碼,所以我可能會失去一些非常明顯的東西。
你能100%排除'path'爲* file.txt *和'file'爲*/home/me/location *的可能性嗎?從這裏看來,這些變量似乎包含與您認爲應該相反的值。 –
@RenéNyffenegger:請注意,字符串「file.txt」不會被預置,而會覆蓋部分路徑字符串。 – KillianDS
使用'std :: cout'時,可以直接使用字符串而不使用'c_str'。另外,真的確定你沒有在某處混合使用'path'和'file'?你的問題中的代碼應該生成'「/home/me/locationfile.txt」。 –