63

私は現在、次のように使用std::ofstreamしています:

std::ofstream outFile;
outFile.open(output_file);

std::stringstream次に、次のようにオブジェクトを渡そうとoutFileします:

GetHolesResults(..., std::ofstream &outFile){
  float x = 1234;
  std::stringstream ss;
  ss << x << std::endl;
  outFile << ss;
}

今、私outFileにはゴミしか含まれていません:「0012E708」がずっと繰り返されています。

GetHolesResults私は書くことができます

outFile << "Foo" << std:endl; 

で正しく出力されoutFileます。

私が間違っていることについて何か提案はありますか?

4

4 に答える 4

107

文字列を作成する必要はありません。出力ストリームが右側のストリームの内容を読み取るようにします (任意のストリームで使用可能)。

outFile << ss.rdbuf();
于 2008-11-28T02:25:21.273 に答える
23

std::ostringstream関数を使用していて、なぜ何も書き込まれないのか疑問に思っている場合は、関数ss.rdbuf()を使用して.str()ください。

outFile << oStream.str();
于 2015-03-16T06:00:43.510 に答える
4

stringstream rdbuf をストリームに渡す場合、改行は変換されません。入力テキストには次を含めることができる\nため、find replace は機能しません。古いコードは fstream に書き込み、それを stringstream に切り替えると endl 変換が失われます。

于 2012-12-07T09:26:23.507 に答える
2

ss.str();代わりにss.rdbuf();(そして文字列ストリームを使用して)書きたいと思います。

ss.rdbuf()の format-flags を使用するoutFileと、コードが再利用できなくなります。つまり、 の呼び出し元はGetHolesResults(..., std::ofstream &outFile)、結果を表に表示するために次のようなものを書きたいと思うかもしれません:

outFile << std::setw(12) << GetHolesResults ...

...そして、なぜ幅が無視されるのだろうか。

于 2018-12-14T01:08:25.410 に答える