002
20.04.2004, 10:00 Uhr
Pablo
Supertux (Operator)
|
Nein.
Was du machen kannst ist die rohe Daten in deinen Struct anzeigen zu lassen, ob das was bringt, weiß ich nicht. bsp:
C++: |
#include <stdio.h> #include <string.h> #include <malloc.h>
typdef struct { char name1[100],name2[100],name3[100]; } names;
int main() { names gruppe; char* rohedata;
printf("Name 1 eingeben: "); fgets(gruppe.name1,100,stdin); ......
rohedata=(char*)malloc(sizeof(names)+1); if (!rohedata) { fprintf(stderr, "Out of memeory\n"); return 1; }
memcpy(rohedata, &gruppe, sizeof(names)); rohedata[sizeof(names)]=0;
printf("%s\n", rohedata);
free(rohedata);
return 0; }
|
Die Frage ist, ob das Sinn macht.
Bearbeitung von Pablo: |
Zitat: |
printf("%s",&gruppe) zeigt das erste array des structs an "name1"
|
Das passiert, da names nur char Arrays enthält. printf("%s....", &gruppe); macht folgendes. printf gibt Zeichen für Zeichen den Inhalt des Arrays aus bis \0 gelesen wird.
gruppe sieht so aus (so kannst du dir graphisch vorstellen), [...] ist ein Speicherblock von Typ egal, nur ein Block. gruppe==[[string1\0][string2\0][string3\0]]
Wenn du so ein Array in printf übergibst, dann ist s von string1\0 das erste was gelesen wird und ausgegeben. Dann macht die Funktion weiter und gint t aus, dann r aus, usw. bis das erste \0 vorkommt, dann glaubt printf, dass die Zeichenkette fertig ausgegeben wurde. printf weiß nicht, dass der Pointer &gruppe von Typ names ist, sondern sie behandelt die Daten in gruppe als wäre eine Zeichenkette aufgrund des "%s" im Format-String von printf. Deshalb wird es nur name1 ausgegeben, aber das ist Zufall.
Zitat: |
ist es auch möglich ein komplettes struct in eine datei zu schreiben ?
|
Ja, das ist es. Mit dem selben Trick wie oben.
C++: |
#include <stdio.h> #include <string.h> #include <malloc.h>
typdef struct { char name1[100],name2[100],name3[100]; } names;
int main() { names gruppe; void* rohedata; FILE* f;
printf("Name 1 eingeben: "); fgets(gruppe.name1,100,stdin); ......
f = fopen("dateiname", "wb"); if (!f) { fprintf(stderr, "Datei kann nicht geöffnet werden\n"); return 1; }
rohedata=malloc(sizeof(names)); if (!rohedata) { fprintf(stderr, "Out of memeory\n"); return 1; }
memcpy(rohedata, &gruppe, sizeof(names)); fwrites(rohedata, sizeof(names), 1, f);
free(rohedata); fclose(f); return 0; }
|
|
Mehr zum Thema "Speicherung von structs": www.fun-soft.de/showtopic.php?threadid=6820&time=1082448933 -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 20.04.2004 um 10:16 Uhr von Pablo editiert. |