Frage zur speicherung von struct
-
Moin erstmal.
Also, ich habe die aufgabe ein struct zu speichern,
und es wieder zu laden. Das ganze Binär.
Wie das geht, weis ich bereits, da ich die Suche benutzen kannAber jetzt erstmal zu meinem Problem, bzw. zu meinem struct:
struct Adresse { char Name[20]; char Vorname[20]; char Strasse[30]; char PLZ[6]; char Ort[20]; char Telefonnummer[20]; char FAX[20]; char Mail[30]; Adresse *nach,*vor; };
Ich möchte jetzt dieses Struct in die Datei schreiben, und zwar sofort,
ohne jedes element einzeln zu schreiben, also per write((char*)&adr,sizeof(adr));
So, jetzt meine Frage, die pointer dort, vom Typ Adresse,
werden die A) als pointer in die Datei geschrieben, also jeweils 4 byte,
(inklusive inhalt?[also die adresse auf die sie zeigen])
oder werden diese ignoriert, und nur die eigentlichen Daten landen in der Datei ?Devil
-
Natürlich werden die Zeiger auch in die Datei geschrieben - allerdings nur die Adresse auf die sie zeigen.
Also einfach bei sizeof() 2*sizeof(Adresse*) abziehen
-
Hm, hat sich wohl damit erledigt *g*
Aber mal nur rein interesse halber, wenn ich das nun in die Datei speichere,
und wieder lade, zeigen dann die Zeiger irgendwo hin, wo vorher ihre Vorgänger/Nachfolger waren ?Devil
-
Ja. Wie Shade schon geschrieben hat, wird die Adresse in der Datei gespeichert.
Sagen wir mal, dass in vor 100 steht und in nach 400, wenn du das speicherst und später wieder ladest, dann steht in deinen Pointern wieder 100 und 400, was natürlich eine gewisse Gefahr birgt ;).
-
AJ schrieb:
Ja. Wie Shade schon geschrieben hat, wird die Adresse in der Datei gespeichert.
Sagen wir mal, dass in vor 100 steht und in nach 400, wenn du das speicherst und später wieder ladest, dann steht in deinen Pointern wieder 100 und 400, was natürlich eine gewisse Gefahr birgt ;).
Ach was, da mach ich einfach ein placement new, dann passt das schon
Devil
-
In C?
Was hast du eigentlich für ein Problem damit, die Felder einzeln zu speichern?
-
Bashar schrieb:
In C?
Was hast du eigentlich für ein Problem damit, die Felder einzeln zu speichern?Wieso sie einzeln speichern, wenn mans auch am Stück kann...
Natürlich könnte ich es auch so machen, aber das ist nur ne übung,
und da brauch man ja sich nicht die ganze arbeit machen.
Plus das bei ner erweiterung den code nicht mehr ändern muss.Und, gibts ne alternative zu Placement New in C ? (placement malloc ?) *g*
Devil
-
devil81 schrieb:
Und, gibts ne alternative zu Placement New in C ? (placement malloc ?) *g*
placement new ruft nur den Konstruktor auf, und sowas gibts in C bekanntlich nicht. Du müsstest dir die Frage somit selbst beantworten können.
-
Die ganze Problematik hast Du doch nur, weil Du das Objekt (Adresse) zusammen mit einer Listenstruktur (Zeiger auf nach und vor) verwurstelst. Das ist ganz schlechter Stil, und einen Effekt siehst Du ja unmittelbar. Besser ist es, Liste und Adresse zu trennen. Dann kann man nämlich, nachdem man die Listenverwaltung ein einziges Mal programmiert hat, diese immer wieder benutzen. Das bedeutet:
struct Adresse { char Name[20]; char Vorname[20]; char Strasse[30]; char PLZ[6]; char Ort[20]; char Telefonnummer[20]; char FAX[20]; char Mail[30]; }; struct ListenElement { struct ListenElement* vor; struct ListenElement* nach; struct Adresse* data; //oder allgemeiner: void* data };
-
Krösus schrieb:
Die ganze Problematik hast Du doch nur, weil Du das Objekt (Adresse) zusammen mit einer Listenstruktur (Zeiger auf nach und vor) verwurstelst. Das ist ganz schlechter Stil, und einen Effekt siehst Du ja unmittelbar. Besser ist es, Liste und Adresse zu trennen. Dann kann man nämlich, nachdem man die Listenverwaltung ein einziges Mal programmiert hat, diese immer wieder benutzen. Das bedeutet:
struct Adresse { char Name[20]; char Vorname[20]; char Strasse[30]; char PLZ[6]; char Ort[20]; char Telefonnummer[20]; char FAX[20]; char Mail[30]; }; struct ListenElement { struct ListenElement* vor; struct ListenElement* nach; struct Adresse* data; //oder allgemeiner: void* data };
Krösus, deine Argumente sind ja alle gut, aber leider
liegt das design nicht bei mir, und ausserdem geht es nicht
darum, wer das beste Design hat, sondern das die Kacke
irgendwie funktioniert. Und solange sie das tut,
interessiert es keinen, wie sie es tut.
Ist nur für die Schule, von daher eigentlich egal,
wollte mich nur versichern.Und, man beachte den
Devil
-
Sag Deinem Lehrer, für so ein Design gehört er erschossen!;)