19

MSVC 2005 では、次のコードがあります。

std::ostringstream stream("initial string ");
stream << 5;
std::cout << stream.str();

私が期待するものは次のとおりです。

initial string 5

私が得るものは次のとおりです。

5nitial string

文字列でストリームを初期化すると、ストリームがその位置を最初の文字列の最後に移動することが期待されます。明らかに、STL は私に同意しません (初めてではありません)。

そのような行動の目的は何ですか?このユースケースは何かに役立ちますか? また、ストリーム位置を最初の文字列の最後まで進める方法はありますか?

4

3 に答える 3

23

を使用しostringstreamて初期値を指定することは、書き込みのために既存のファイルを開くのと同じです。そこにはいくつかのデータがあり、特に指定しない限り、最初の位置はデータの先頭になります。データをシークするかios::ate、最初に書き込みポインターを既存のデータの末尾に配置するように指定するかios::app、書き込みポインターを常に既存のデータの末尾に配置するように指定することができます。

于 2010-10-01T15:25:49.733 に答える
18

コンストラクターの 2 番目 (オプション) のパラメーターを指定して、最後にストリーム カーソルを設定できます。

std::ostringstream stream("initial string ", std::ios::ate);
于 2010-10-01T15:21:26.353 に答える
4

最後までシークするには、次のようにします。

stream.seekp(0, ios_base::end);

書き込み位置がデフォルトで前面にある理由はわかりません。

于 2010-10-01T15:19:57.880 に答える