C++ fread() in einen std::string
Wie immer, Probleme mit Zeigern. Dieses mal bin ich versucht, eine Datei Lesen (im Binärmodus geöffnet) und speichern einen Teil davon in einen std::string-Objekt.
Mal sehen:
FILE* myfile = fopen("myfile.bin", "rb");
if (myfile != NULL) {
short stringlength = 6;
string mystring;
fseek(myfile , 0, SEEK_SET);
fread((char*)mystring.c_str(), sizeof(char), (size_t)stringlength, myfile);
cout << mystring;
fclose(myfile );
}
Ist das möglich? Ich bekomme keine Nachricht. Ich bin sicher, die Datei ist O. K., Wenn ich versuche mit char* funktioniert es aber ich möchte, um es zu speichern direkt in den string. Vielen Dank für Ihre Hilfe!
dude... was Sie von c_str() ist nicht veränderbar...
der Kommentar oben und beantworten Sie unten sind beide richtig, aber wenn Sie mit C++, warum bist du mit C Idiome für Datei-I/O
und um das ganze abzurunden, C++ - streaming für die Ausgabe nach rechts.
der Kommentar oben und beantworten Sie unten sind beide richtig, aber wenn Sie mit C++, warum bist du mit C Idiome für Datei-I/O
und um das ganze abzurunden, C++ - streaming für die Ausgabe nach rechts.
InformationsquelleAutor ali | 2012-11-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Legen Sie die Zeichenfolge groß genug sein, zunächst zu vermeiden, Pufferüberlauf und auf das byte-array als
&mystring[0]
zu befriedigenconst
- und anderen Vorschriftenstd::string
.Gibt es viele, viele Probleme in diesem code, aber das ist eine minimale Anpassung, um richtig zu verwenden
std::string
.InformationsquelleAutor Potatoswatter
string::c_str()
zurückconst char*
die kann man nicht ändern.Eine Möglichkeit dazu wäre die Verwendung eines char* Erster, und erstellen Sie eine Zeichenfolge aus.
Beispiel
Aber dann wieder, wenn Sie möchten, eine Zeichenfolge, sollten Sie vielleicht Fragen Sie sich
Why am I using fopen and fread in the first place??
fstream
wäre eine viel bessere option.Lesen Sie mehr über es hier
Ich sehe, danke für den Hinweis it out 🙂
Feste meine Antwort..
Wer hat gesagt, es gibt keine 0-byte-innen binäre Daten? Und noch schlimmer, wer hat gesagt, das Daten-ist null-terminiert? Sie sollten die pass-Daten der Größe
std::string
ctorInformationsquelleAutor Jimmy Lu
Ich würde empfehlen dies als die beste Möglichkeit, um so etwas zu tun. Auch sollten Sie überprüfen, um sicherzustellen, dass alle bytes gelesen wurden.
InformationsquelleAutor Mitchell Findley
Bitte schauen Sie sich die folgenden über c_str zu sehen, einige Dinge, die falsch mit Ihrem Programm. Ein paar Fragen sind das c_str nicht modifizierbar, sondern auch, dass es gibt einen Zeiger auf den string-Inhalt, aber Sie nie initialisiert den string.
http://www.cplusplus.com/reference/string/string/c_str/
Als für die Lösung... Sie könnten versuchen, das Lesen in einen char*, und dann initialisieren Sie Ihren string aus.
InformationsquelleAutor RonaldBarzell
Nein ist es nicht.
std::string::c_str()
Methode nicht wieder eine änderbare Zeichenfolge wie können Sie überprüfen, aus hier. Eine bessere Lösung wäre die Verwendung eines Pufferschar
array. Hier ist ein Beispiel:InformationsquelleAutor diegoperini