stringstream führt zu Crash
-
Mal eine Frage zu ungefähr dem selben Thema:
Im Moment bastle ich mir meine ostringstreams zusammen, und will die dann alle der Reihe nach in einen ofstream füttern, um in eine Datei zu schreiben. Was ich da im Moment mache, um vernünftige Ergebnisse zu bekommen, ist:
ostringstream buffer; // buffer wird irgendwie gefüllt... ofstream file; file << buffer.str();Geht natürlich einwandfrei, sieht aber unnötig umständlich aus. Die Frage wäre aber, ob das nicht irgendwie auch direkt funktioniert? Die beiden Streams sind doch von der selben Klasse (ostream) abgeleitet, da müssten die doch irgendwie auch direkt aneinanderhängbar sein. Leider scheint dabei aber nur die Adresse des buffers geschrieben zu werden, statt des Inhaltes. Muss ich also zwangsweise über den String gehen?
-
ostringstream buffer; ofstream file; file << buffer.rdbuf();
-
Geht das schneller? Ich nehm's mal an.
EDIT: Nö, es geht gar nicht. Eingebaut, ausprobiert. Aber alles ab dem einen nach oben vorgeschlagener Art veränderten Aufruf kommt nicht mehr in die Datei.
-
David Schneider schrieb:
Wüsste jetzt allerdings nicht, was ich da für error flags produziert haben könnte, die beim zweiten Mal eine ordentliche Ausführung verhindern könnten. Aber solange es jetzt geht, soll mir das ja egal sein.
der stream wurde bis zum ende gelesen, und damit "eof" gesetzt.
es gibt allerdings auch eine einfachere lösung:
istringstream buffer("3.142, 1.414, 2.718"); for (int i = 0; i < 3; i++) { buffer >> theFloats[i]; buffer.get(); //schlucke ',' }
-
David Schneider schrieb:
Geht das schneller? Ich nehm's mal an.
den streampuffer (stream.rdbuf()) zu übergeben ist die schnellste möglichkeit, die es gibt.
-
Ah, stimmt, so geht's natürlich aus. Hatte gar nicht an die Methoden à la get gedacht, die ja jeder Stream hat.
Was das andere betrifft, siehe meinen Edit weiter oben. Scheint nicht zu gehen.
-
für das "scheint nicht zu gehen" bräuchte ich wohl meine glaskugel, die ist aber gerade in der reinigung.
was geht nicht? ist die datei geöffnet? noch etwas im stringstream drin? ...?
-
Ich beschrieb das Problem oben ausführlich. Es wird nichts in die Datei geschrieben, und zwar ab dem ersten Aufruf von operator <<, der einen streambuf bekommt, selbst wenn die Aufrufe danach wieder mit strings arbeiten.
-
ach sorry, mein fehler: habe übersehen, dass in dem beispiel ein ostringstream vorkommt (war noch ganz bei istringstream).
mach doch einfach einen stringstream daraus, dann wird es funktionieren.
-
Das stimmt in der Tat. Gibt's einen Grund dafür, dass das nur mit stringstream geht? Und allgemein: Lohnt es sich denn dann bei solchen "Aussetzern" überhaupt, die spezialisierten Klassen istringstream und ostringstream zu benutzen?