fwrite & fread von nem struct
-
was ist CString?
-
was ist CString?
das ist ne mfc-klasse
ist ganz nett braucht man aber nicht wirklich weils nicht mächtiger ist als std::string...
wenn man es denn schon in ansi durchziehen will sollte man auch std::string nehmen oder wenns c sein soll bleibt einem wohl nur ein char-array...
-
Windalf schrieb:
... wenns c sein soll bleibt einem wohl nur ein char-array...
Genau auf das wollte Shade hinaus. Lies mal nach in welchem Forum dieser Thread ist.
-
Du kannst auf diese Weise keine Klasseninstanzen innerhalb von structs speichern! Dass es in deinem ersten Fall funktioniert, ist reiner Zufall. Du weist ja nie wie diese Klasse intern arbeitet. Wenn CString zB. irgendwie Zeiger abspeichert, zeigen die nach Programneustart und struct-Laden ins Nirvana. Am einfachsten ist es wohl, wenn Du char[32]-Felder nimmst. (Bei char* haettest Du das Problem, dass Du Zeiger abspeicherst, aber nicht die Daten).
-Gunnar
-
Eigentlich war der Grund das ich gefragt habe nicht der, dass es dann nicht ins C Forum passt, sondern eher der, dass man Klassen wie zB CString nicht mit fwrite speichern kann.
Denn CString beinhaltet sicher nur einen Zeiger auf den Speicherbereich - also ist im Prinzip 'nur' ein char* - wenn man jetzt fwrite macht, wird die Adresse auf die der char* zeit, in die Datei geschrieben (nicht aber der String selbst)
-
Shade Of Mine schrieb:
Eigentlich war der Grund das ich gefragt habe nicht der, dass es dann nicht ins C Forum passt, sondern eher der, dass man Klassen wie zB CString nicht mit fwrite speichern kann.
Denn CString beinhaltet sicher nur einen Zeiger auf den Speicherbereich - also ist im Prinzip 'nur' ein char* - wenn man jetzt fwrite macht, wird die Adresse auf die der char* zeit, in die Datei geschrieben (nicht aber der String selbst)
Ok, dann hab ich mich wohl verschätzt. Ist aber auch wirklich nicht einfach bei einer so kurzen Frage.
-
Gunnar schrieb:
Du kannst auf diese Weise keine Klasseninstanzen innerhalb von structs speichern! Dass es in deinem ersten Fall funktioniert, ist reiner Zufall. Du weist ja nie wie diese Klasse intern arbeitet. Wenn CString zB. irgendwie Zeiger abspeichert, zeigen die nach Programneustart und struct-Laden ins Nirvana. Am einfachsten ist es wohl, wenn Du char[32]-Felder nimmst. (Bei char* haettest Du das Problem, dass Du Zeiger abspeicherst, aber nicht die Daten).
-GunnarHi Gunnar,
danke für Deinen Beitrag. Klingt logisch was Du da geschrieben hast.
Wenn ich aber mehrere Dialoge mit jede Menge Eingabefeldern hab, bei denen überall CString-Typen hinterlegt sind? Da müsste ich ja ständig von char[...] nach CString umwandlen, oder nicht? Gibt es da vieleicht noch andere Möglichkeiten eine Struktur zu speichern, außer mit fwrite(fread) ?Greets
Arjen
-
Ja die einzelnen CStrings mit fprintf() speichern.
-
Es handelt sich bei mir übrigens eigentlich um ein MFC-Projekt (C++)
Hab nur leider keine Ahnung was mir C++ bzgl. Laden und Speichern von Strukturen schönes anbieten kann.Jetzt gehört es schon fast nicht mehr in dieses Forum ANSI C;)
Greets
Arjen
-
Für die Dateiverarbeitung unter C++ schau dir mal die iostream an. Aber ich bezweifle, dass es ne Methode zum Speichern von Strukturen gibt. Außerdem verwendet man in C++ Klassen ;). Ich schätze mal du wirst nicht drum rum kommen die Strings einzeln zu speichern.