PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigene Variablen-Typen abspeichern?? Wie?



25-01-2001, 09:45
hallo forum,
wie muss ich es anstellen, wenn ich einen beliebigen Variablentyp (typedef struc ...)
abspeichern möchte, ohne die einzelnen elemente ansprechen zu müssen??
bin über jede hilfe dankbar...

olli

25-01-2001, 15:25
unter c wirst du wohl oder übel alle Elemente einzeln abspeichern müssen. Unter Windows gibts für C++ und MFC sowas wie Dokumentenserialisierung, das dein Vorhaben in die Tat umsetzt. Unter Unix aber musst du dir halt deine eigene Serialisierungsroutine schreiben, die alles einzeln abspeichert.

Marko

25-01-2001, 17:03
geht das eventuell mit fwite(struc,size,sizeof(struc),fp);

25-01-2001, 19:22
<BLOCKQUOTE><font size="1" face="Arial,Helvetica,Geneva">Zitat:</font><HR>Original erstellt von lolli:
geht das eventuell mit fwite(struc,size,sizeof(struc),fp);
[/quote]

Du meinst, z.B.

typedef struct {
...
} MeinTyp;

MeinTyp m;

...

fwrite(&m,1,sizeof(m),fp);
...

Ja es kann so gehen. Ist aber nicht sehr portabel. D.h. Die erzeugten Dateien koennen von Compiler zu Compiler und von Optimierungsflag zu Optimierungsflag unterschiedlich sein.
D.h. sie sollten wirklich nur von dem Binary das sie erstellt hat wieder benutzt werden.

25-01-2001, 20:49
Danke für den Tipp. ich werd's gleich al probieren..
Olli

25-01-2001, 20:55
ok, das scheint ja zu funktionieren...
Kann das evtl. auch mit einem Array klappen?
so wies unten ist, stürzt das prog immer ab... :-(
------------------


DATA dfr[]={0};
int i;
i=0;
while((row = mysql_fetch_row(result))){
dfr[i].wert1=row[0];
dfr[i].wert2=row[1];
i++;
}
...
fwrite(&dfr,i,sizeof(dfr),fp);
...

26-01-2001, 00:27
Kommando zurueck und dein C-fuer-Anfaenger-Buch bitte nochmal genau lesen, wenn du nicht siehst, weshalb das Programm nicht funktioniert.

Dein Array ist nur 1 Element gross. Liest du mehr als ein Element ein, schreibst du wild in den Speicher => Segmentation fault.

Loesungen:
1) Array fixer groesser und mehr geht nicht zu lesen.
2) Dynamische Speicherverwaltung mit malloc, realloc und nicht vergessen free. Aber vorher das Kapitel ueber Pointer lesen und verstehen.
3) Bibliothek benutzen, die einem Containertypen bietet, z.B. glib fuer C oder STL fuer C++.


Fehlersuche-Tipp:
mit -g beim gcc kompiliern und Debugger (gdb oder GUI-Frontend wie kgdb, ddd, insight, ...) verwenden.
bye


[Dieser Beitrag wurde von jgbauman am 26. Januar 2001 editiert.]

26-01-2001, 15:28
mit STL (wiess nicht ob eine STL-Version bei Watcom dabei ist) z.B.


#include <vector.h>
...

vector<DATA> dfr;

while((row = mysql_fetch_row(result))){
DATA d;
d.wert1=row[0];
d.wert2=row[1];
dfr.push_back(d);
}

...
for (vector<DATA>::iterator i=dfr.begin();i!=dfr.end();i++) {
fwrite((DATA*)i,1,sizeof(DATA),fp);
}
...


Mehr zur STL http://www.sgi.com/Technology/STL/


[Dieser Beitrag wurde von jgbauman am 26. Januar 2001 editiert.]

26-01-2001, 16:10
Ich danke Dir schon mal. Ausprobieren werde ich es etwas später..

Olli

27-01-2001, 00:45
hi,
wie könnte denn ein solches konstrukt für wc++ aussehen

olli