我因为奇怪的行为而度过了糟糕的几天。我有一个std :: string,我在其上使用+ =运算符添加另一个字符串(实际上是附加到路径的文件的名称)。当我运行该程序时,我发现该文件未被找到。后来很多couts发现我正在将文件名添加到字符串的开头。
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和dirent,实际上它是第一次编译或多或少。为了以防万一,我运行了dos2unix。现在我有点难过了,但是我还没有真正复制代码,而不是完全无关紧要,所以我可能会遗漏一些令人眼花缭乱的东西。
答案 0 :(得分:3)
路径名是否以某种方式附加了“\ r”,因此当您将其打印到cout时,它会打印“/ home / me / location /”,返回到行的开头,然后打印“line”。 TXT“?
正如有人所说,用调试器查看变量。 (我的直觉也是用于记录/打印,但调试器也很有用)
答案 1 :(得分:1)
您缺少的是目录名称和文件名之间的/
分隔符。
否则您发布的代码没有任何问题。
要记住的一件事是您的代码修改了path
变量。如果您针对不同的文件名重复path += file
,请务必每次都重新初始化path
。
P.S。您发布的四行代码无法打印file.txt/location
。您发布的代码与您正在运行的代码不同,或者输出不同。
答案 2 :(得分:1)
看起来file
以回车开头。如果是这种情况,+=
仍然会将file
附加到path
,但是当字符串cout时,它会显示您描述的行为。
答案 3 :(得分:0)
您应该使用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();