Ich habe in der Vergangenheit eine Abfolge von Clear und Str verwendet:
// clear, because eof or other bits may be still set.
s.clear();
s.str("");
Dies gilt sowohl für die Eingabe- als auch für die Ausgabe-Stringströme. Alternativ können Sie manuell löschen, dann suchen Sie die entsprechende Sequenz an den Anfang:
s.clear();
s.seekp(0); // for outputs: seek put ptr to start
s.seekg(0); // for inputs: seek get ptr to start
Dadurch werden einige Umwidmungen verhindert, die von str
indem Sie stattdessen das überschreiben, was sich gerade im Ausgabepuffer befindet. Das Ergebnis sieht wie folgt aus:
std::ostringstream s;
s << "hello";
s.seekp(0);
s << "b";
assert(s.str() == "bello");
Wenn Sie die Zeichenkette für c-Funktionen verwenden wollen, können Sie std::ends
und setzen eine abschließende Null wie folgt:
std::ostringstream s;
s << "hello";
s.seekp(0);
s << "b" << std::ends;
assert(s.str().size() == 5 && std::strlen(s.str().data()) == 1);
std::ends
ist ein Überbleibsel des veralteten std::strstream
das direkt in ein Char-Array schreiben konnte, das Sie auf dem Stack zugewiesen hatten. Sie mussten manuell eine abschließende Null einfügen. Wie auch immer, std::ends
ist nicht veraltet, ich denke, weil es immer noch nützlich ist, wie in den oben genannten Fällen.
0 Stimmen
Mögliche Duplikate von Wie kann man in C++ eine Stringstream-Variable löschen?