Dynamische Stringklasse: kann nicht speichern
-
Ich hab mal wieder ein Problem:
Ich habe eine danamische Stringklasse implementiert (wie aus einem Buch verlangt)
Jetzt habe ich bloß das Problem, dass ich eine Instanz der Stringklasse ein Element einer anderen Klasse ist, die eigentlich nur eine Containerklasse darstellt. Wenn ich jetzt die komplette Instanz der Containerklasse speichere und später wieder lade, kommt es zum Fehler.Der Fehler liegt glaube ich in der String-Klasse:
Sie enthält einen Pointer auf char (char *m_pcBuffer;) Also wenn ich die Klasse speichere, dann wird der Pointer gespeichert und nicht der eigentliche Sring.
Bis hierhin hab ich das jetzt verstandenAber:
Wenn ich statt char *foo einfach char foo[15] nehme, dann kann ich zwar fehlerfrei speichern und laden (aus Datei) aber es ist nicht mehr dynamischWas soll ich tun???

-
Wie hast du laden und speichern implementiert?
-
So
struct { MyString s; //Meine dynamische Stringklasse //Weitere Daten... } data; //Schreiben ofstream OutFile("Data.bin",ios::out|ios::binary); OutFile.write(reinterpret_cast<char *>(data),sizeof(data)); OutFile.close(); //Lesen ifstream InFile("Data.bin",ios::in|ios::binary); InFile.read(reinterpret_cast<char *>(data),sizeof(data)); InFile.close();Es gibt 2 Programme eins zum schreiben und eins zum lesen (Hat tiefere Bedeutung, frag nicht warum 2 Programme)
-
Wird so nicht gehen ... bzw. kommt auf deine MyString klasse an, aber sizeof gibt dir nicht die Länge deines Strings mal sizeof(char[wchar_t]) sondern nur sizeof(char) ... also in dem Fall ^^
-
Die beiden dürften dich interessieren:
http://c-plusplus.net/forum/viewtopic-var-t-is-196751.html
http://c-plusplus.net/forum/viewtopic-var-t-is-196447.html
-
Sorry hab mich verschrieben, statt
reinterpret_cast<char *>(data) //besser reinterpret_cast<char *>(&data)Und das Problem liegt nicht an sizeof, sondern daran, dass ich nur den Pointer auf den Buffer (also jetzt in der MyString-Klasse) speichere. Wenn ich das speichern und Laden in einem Programm habe, dann funktioniert es, ist ja logisch, der Pointer ist ja der selbe. Wie soll ich das innerhalb von MyString implementieren, sodass der komplette Buffer innerhalb von MyString ist, und das dynamisch

-
Höö? Dein schreiben ist einfach falsch ... überlade lieber den operator << ...
std::string string; std::ofstream OutFile("Data.bin", std::ios::binary); OutFile.write(string.c_str(), sizeof(char) * (string.length() + 1));... so damit du es auch lesen kannst, solltest du aber vor deinen String immer noch die Länge von diesem schreiben ...