Ich möchte eine std::string
Variable, die ich vom Benutzer akzeptiere, in eine Datei schreiben . Ich habe versucht, die write()
Methode zu verwenden, und sie 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 dafür std::string
geeignet oder sollte ich ein Zeichenarray oder so verwenden.
ofstream write;
std::string studentName, roll, studentPassword, filename;
public:
void studentRegister()
{
cout<<"Enter roll number"<<endl;
cin>>roll;
cout<<"Enter your name"<<endl;
cin>>studentName;
cout<<"Enter password"<<endl;
cin>>studentPassword;
filename = roll + ".txt";
write.open(filename.c_str(), ios::out | ios::binary);
write.put(ch);
write.seekp(3, ios::beg);
write.write((char *)&studentPassword, sizeof(std::string));
write.close();`
}
std::string
Ordnung.Antworten:
Sie schreiben derzeit die Binärdaten im
string
Objekt in Ihre Datei. Diese Binärdaten 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 der beste Weg, dies zu tun, wahrscheinlich
ofstream
ein "Out-File-Stream". Es verhält sich genau sostd::cout
, aber die Ausgabe wird in eine Datei geschrieben.Im folgenden Beispiel wird eine Zeichenfolge aus stdin gelesen und diese Zeichenfolge dann in die Datei geschrieben
output.txt
.#include <fstream> #include <string> #include <iostream> int main() { std::string input; std::cin >> input; std::ofstream out("output.txt"); out << input; out.close(); return 0; }
Beachten Sie, dass
out.close()
dies hier nicht unbedingt erforderlich ist: Der Dekonstruktor vonofstream
kann dies für uns erledigen, sobaldout
der Geltungsbereich überschritten wird .Weitere Informationen finden Sie in der C ++ - Referenz: http://cplusplus.com/reference/fstream/ofstream/ofstream/
Wenn Sie nun in binärer Form in eine Datei schreiben müssen, sollten Sie dies unter Verwendung der tatsächlichen Daten in der Zeichenfolge tun. Der einfachste Weg, diese Daten zu erfassen, wäre die Verwendung
string::c_str()
. Sie könnten also verwenden:write.write( studentPassword.c_str(), sizeof(char)*studentPassword.size() );
quelle
Angenommen, Sie verwenden eine
std::ofstream
zum Schreiben in eine Datei, dann schreibt das folgende Snippet einestd::string
Datei in lesbarer Form:std::ofstream file("filename"); std::string my_string = "Hello text in file\n"; file << my_string;
quelle
Entfernen Sie die
ios::binary
aus Ihren Modi in Ihrem Ofstream und verwenden SiestudentPassword.c_str()
statt(char *)&studentPassword
in Ihremwrite.write()
quelle