私は奇妙な行動のための日の悪いカップルを持っています。私は+ =演算子を使用して別の文字列(実際にはパスに追加されるファイルの名前)を追加するstd :: stringを持っています。プログラムを実行すると、ファイルが見つからないことがわかりました。大規模な文章は後で、文字列の先頭にファイル名が追加されていることを明らかにしました。std :: string + = operator
std::string path("/home/me/location/");
std::string file("file.txt");
path += file;
std::cout << path.c_str();
出力は「file.txt/location」です。私は2つの文字列を一緒に追加する単純なプログラムを試しました。これは私が期待していた(gcc v 4.3)うまく動作します。私はWindowsマシンからコードをコピーしました。私は新しいファイルパスを越えた問題は期待していませんでしたが、実際にSTLとdirentを使用しています。私はdos2unixをちょうど実行した。今私はちょっと困っていますが、まったく些細なことを超えてコードをコピーしているわけではありません。
'path'は* file.txt *、fileは*/home/me/location *の可能性を100%排除できますか?ここから、これらの変数には、あなたが思うものとは反対の値が含まれているように見えます。 –
@RenéNyffenegger: "file.txt"という文字列は先頭に追加されず、パス文字列の一部を上書きします。 – KillianDS
'std :: cout'を使うときは、文字列を' c_str'なしで直接使うことができます。また、 'path'と' file'をどこかで混在させていないのは本当ですか?あなたの質問のコードは '' /home/me/locationfile.txt ''を生成するはずです。 –