Hi
Ich schreibe gerade für ein Projekt an unserer Schule ein Programm, das die Verwaltung übernehmen soll. So nun wollte ich verschiedene Daten wie ein Verfallsdatum, die Anzahl und das Gewicht binär in einer Datei speichern. Soweit klappt es auch. Doch bei der Speicherung von Text funktioniert es plötzlich überhaupt nicht mehr. Wenn ich z.B. den Warennamen in der Datei speichere, kommt beim Laden nur unverständliche Zeichen heraus. Ich habe es schon versucht den Warennamen als const char *, als wxString oder als char array speichern zu lassen. Doch immer das selbe falsche Ergebnis. Hier noch einmal mein Daten struct zur Verdeutlichung:
Ich weiß ehrlich gesagt nicht was ich falsch mache. Alles bis auf das die beiden Texte funktionieren nicht. Anscheinend werden sie nicht, oder nicht richtig in die Datei geschrieben. Also weiß vielelicht jemand woran das liegt und könnte mir eventuell ein paar tipps geben wie ich so einen kurzen Text vernünftig in eine binäre Datei speichern kann?
Ich schreibe gerade für ein Projekt an unserer Schule ein
Programm, das die Verwaltung übernehmen soll. So nun wollte
ich verschiedene Daten wie ein Verfallsdatum, die Anzahl und
das Gewicht binär in einer Datei speichern.
Die kurze Antwort ist: lass es. Nimm eine Datenbank.
Soweit klappt es
auch. Doch bei der Speicherung von Text funktioniert es
plötzlich überhaupt nicht mehr. Wenn ich z.B. den Warennamen
in der Datei speichere, kommt beim Laden nur unverständliche
Zeichen heraus.
Wie speicherst du? Wie lädst du die Daten wieder?
Sobald du probierst, Objekte (und nicht nur structs) zu speichern, musst du dich um die Serialisierung kümmern.
Doch bei der Speicherung von Text funktioniert es
plötzlich überhaupt nicht mehr. Wenn ich z.B. den Warennamen
in der Datei speichere, kommt beim Laden nur unverständliche
Zeichen heraus.
Ich weiß ehrlich gesagt nicht was ich falsch mache.
Der Typ wxString ist eine Klasse mit dynamisch alloziiertem
Speicher für den Inhalt, ein char* ist lediglich ein Zeiger
auf einen *anderen* Speicherblock, in dem die Daten stehen.
Mit obigem Trick sollte es „zunächst“ gehen. Du kannst
den Text mit strcpy(…) eintragen und musst *selbst*
aufpassen, dass er die gegebene Länge nicht überschreitet.
Eine schöne oder sichere Lösung ist das demnach nicht.
So ist das nun mal, wenn man eine „Datenbank“ neu erfindet,
und dann ausgerechnet in C
Danke für die schnelle Antwort, aber…
Es klappt noch nicht so wirklich. Ich habe die structs entsprechend deinem Vorschlag umgeändert. Doch wie auch vorher kommen immernoch beim Laden die komischen unzusammenhängenden Zeichen raus. Um die Daten in das struct hineinzukopieren habe ich strcpy benutzt. Allerdings kann ich ein wxString nicht in ein char array umwandeln. So habe ich es versucht:
Also den vom EditCtrl zurückommenden wxString habe ich scheinbar in das passende Format umgewandelt. Jedenfalls beschwert sich der Compiler nicht. Aber wie gesagt, es kommt nur Zeichen müll heraus.
Hast du eventuell noch eine Idee wie ich den Text richtig mit speichern kann?
Also den vom EditCtrl zurückommenden wxString habe ich
scheinbar in das passende Format umgewandelt. Jedenfalls
beschwert sich der Compiler nicht. Aber wie gesagt, es kommt
nur Zeichen müll heraus.
Das ist „verkehrt herum“. Die Funktion strcpy() verlangt
*zuerst* den „Zielstring“ und dann die Quelle:
Danke das hat geklappt
So, vielen Dank nun klappt es. Ich werde bei Zeiten mal überlegen, ob ich es nicht tatsächlich noch in eine Datenbank alles speichern lasse. Aber wie dem auch sei es klappt.