簡體   English   中英

std :: string + =運算符

[英]std::string += operator

我因為奇怪的行為而度過了糟糕的幾天。 我有一個std :: string,我在上面使用+ =運算符添加了另一個字符串(實際上是將文件名附加到路徑中)。 當我運行程序時,我發現找不到該文件。 大量提示后來透露,我正在將文件名添加到字符串的開頭。

std::string path("/home/me/location/");
std::string file("file.txt");
path += file;
std::cout << path.c_str();

此輸出為“ file.txt /位置” !!! 我嘗試了一個簡單的程序,該程序僅將兩個字符串加在一起,並且可以正常工作(我期望的是gcc v 4.3)。 我已經從Windows機器上復制了代碼,除了新的文件路徑之外,我沒有想到任何問題,它僅真正使用STL和dirent,實際上它或多或少是第一次編譯。 我運行dos2unix以防萬一。 現在我有些困惑,但是在完全瑣碎之前,我還沒有真正復制過代碼,因此我可能會錯過一些顯而易見的東西。

路徑名是否以某種方式附加了“ \\ r”,以便當您將其打印到cout時,它會打印“ / home / me / location /”,返回到該行的開頭,然后打印“ line.txt”?

就像有人說的那樣,用調試器查看變量。 (我的直覺也用於日志記錄/打印,但是調試器也很有用)

您所缺少的是目錄名和文件名之間的/分隔符。

否則,您發布的代碼沒有任何問題。

要記住的一件事是您的代碼修改了path變量。 如果為不同的文件名重復執行path += file ,請確保每次都重新初始化path

PS:您張貼的四行代碼無法打印出file.txt/location 您發布的代碼與您正在運行的代碼不同,或者輸出不相同。

看起來file回車開頭。 如果是這種情況, +=仍會將file追加到path ,但是當字符串被cout'ed時,它將顯示您描述的行為。

您應該為此使用std::stringstream

std::stringstream tempss;
std::string path("/home/me/location");
std::string file("file.txt");

tempss << path;
tempss << file;

std::string filepath = tempss.str();

暫無
暫無

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

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