Speichern und laden von struct
-
Hallo,
Ich habe ein kleines Problem beim speichern einer Struktur.
Meine Struktur sind in etwa so aus:
struct{ char *str char *str1 }struktur;Ich gebe den Variablen zwei Zeichenkette
struktur.str = "string"; CString str = "string2"; struktur1.str1 = (char*)(LPCSTR)str;und speichere die Struktur
CFile pFile; pFile.Open(dateiname,CFile::modeWrite); pFile.Write(&struktur,sizeof(struktur)); pFile.Close();Wenn ich die Struktur nun wieder lade mit
pFile.Read(&struktur,sizeof(struktur));Dann steht in struktur.str der richtige String während in struktur.str2 nur wirre Zeichen stehen.
Kann mir hier evtl jemand helfen?
Danke
-
Ich habs nicht ausprobiert meine mich aber zu erinnern, dass eine Zuweisung wie du sie machst lediglich den Speicherbereich kopiert. Irgend was wie strcpy(..,..) sollte gehen.... Warum du allerdings nicht zur Gänze CString benutzt, ist mir eher schleierhaft
-
Du kannst auch nicht in einer Struktur (oder wo auch immer) char-Pointer deklarieren, und ihnen dann Zeichen zuweisen, ohne vorher Speicher reserviert zu haben! Ganz abgesehen davon, dass du eben strcpy, memcpy o.ä. für eine solche Zuweisung benutzen musst, wie schon gesagt wurde.
-
Mit CString habe ich es auch schon probiert dort steht dann nur beim erstem Wert die richtige Zeichenfolge.
Das mit der Speicherresservierung hatte ich auch schon probiert, dort ändert sich allerding auch nicht viel.
-
penatux schrieb:
Mit CString habe ich es auch schon probiert dort steht dann nur beim erstem Wert die richtige Zeichenfolge.
Dann machst du aber irgendwas grundlegend falsch. Zeig am besten mal am Stück den Code, in dem du den CString anlegst, zuweist und weiter verwendest.
-
Die Struktur
struct FileSave { CString strIconFile; CString str; char *strStatic; }; FileSave _FileSave;// zwei CString CString str = "Zeichenkette"; _FileSave.str = str; _FileSave.strIconFile = "test123456789"; // char * _FileSave.strStatic ="noch sein string"; CFile pFile; pFile.Open("D:\\test.txt", CFile::modeCreate | CFile::modeWrite); pFile.Write(&_FileSave,sizeof(_FileSave)); pFile.Close();Wenn ich die Datei nun wieder Lese steht lediglich in strStatic die richtige Zeichenfolge.
-
Du musst die CStrings vorher casten. Am besten, du schreibst (und liest) die Elemente deines structs einzeln, also nacheinander, in die Datei.
Siehe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-197871-and-highlight-is-cfile+write+cstring.html
Btw, was du mit strStatic machst, geht auf keine Kuhhaut!
Du weist doch da keine Zeichenkette zu (wie du anzunehmen scheinst), sondern die Adresse eines Stringliterals. Das ist gar nicht gut... char *strStatic ist ja auch nur ein Pointer, der eine 4 (oder
Byte große Adresse speichert, keinen String.