Ich möchte eine schreiben std::string Variable, die ich vom Benutzer in eine Datei akzeptiere. Ich habe versucht, die zu verwenden write() Methode und schreibt in die Datei. Aber wenn ich die Datei öffne, sehe ich Kästchen anstelle der Zeichenfolge.
Die Zeichenfolge ist nur ein einzelnes Wort variabler Länge. Ist std::string dafür geeignet oder sollte ich ein Zeichenarray oder so etwas verwenden.
Bitte zeigen Sie Ihren Code. Im Allgemeinen, wenn richtig verwendet, std::string ist dafür in Ordnung.
– Nutzlos
13. März 2013 um 14:27 Uhr
Sie müssen den ‘Payload’ CONTENT der Zeichenfolge speichern, nicht das Zeichenfolgenobjekt als solches (das normalerweise nur eine Länge und einen Zeiger auf den tatsächlichen Inhalt enthält).
– Mats Petersson
13. März 2013 um 14:28 Uhr
JSQuareD
Sie schreiben gerade die Binärdaten in die string-Objekt zu Ihrer Datei. Diese binären Daten bestehen wahrscheinlich nur aus einem Zeiger auf die tatsächlichen Daten und einer Ganzzahl, die die Länge der Zeichenfolge darstellt.
Wenn Sie in eine Textdatei schreiben möchten, ist dies wahrscheinlich am besten mit einer ofstream, ein “Out-File-Stream”. Es verhält sich genau so std::coutaber die Ausgabe wird in eine Datei geschrieben.
Das folgende Beispiel liest eine Zeichenfolge aus stdin und schreibt diese Zeichenfolge dann in die Datei output.txt.
Beachten Sie, dass out.close() ist hier nicht unbedingt notwendig: der Dekonstruktor von ofstream können dies schnellstmöglich für uns erledigen out geht aus dem Rahmen.
Wenn Sie nun in eine Datei in Binärform schreiben müssen, sollten Sie dies mit den tatsächlichen Daten in der Zeichenfolge tun. Der einfachste Weg, diese Daten zu erfassen, wäre die Verwendung von string::c_str(). Sie könnten also verwenden:
Ich musste std::ios::binary hinzufügen, um keine Probleme mit Zeilenumbrüchen zu haben
– Watschelt
31. Oktober 2016 um 0:41 Uhr
out.close() ? zweimal? falsche Antwort
– caoanan
29. Dezember 2021 um 10:17 Uhr
@caoanan es soll die API demonstrieren. Ich erwähne auch im Text des Körpers, dass es automatisch passiert, wenn die Variable den Gültigkeitsbereich verlässt. Jedenfalls, close() ist idempotent, also kann es nicht schaden, wenn es mehrmals aufgerufen wird.
– JSQuareD
8. Januar um 18:46 Uhr
Stefan
Angenommen, Sie verwenden a std::ofstream Um in eine Datei zu schreiben, schreibt das folgende Snippet a std::string in menschenlesbarer Form ablegen:
std::ofstream file("filename");
std::string my_string = "Hello text in file\n";
file << my_string;
entferne das ios::binary aus Ihren Modi in Ihrem ofstream und verwenden studentPassword.c_str() anstatt (char *)&studentPassword in deiner write.write()
9174200cookie-checkWie schreibt man std::string in eine Datei?yes
Bitte zeigen Sie Ihren Code. Im Allgemeinen, wenn richtig verwendet,
std::string
ist dafür in Ordnung.– Nutzlos
13. März 2013 um 14:27 Uhr
Sie müssen den ‘Payload’ CONTENT der Zeichenfolge speichern, nicht das Zeichenfolgenobjekt als solches (das normalerweise nur eine Länge und einen Zeiger auf den tatsächlichen Inhalt enthält).
– Mats Petersson
13. März 2013 um 14:28 Uhr