Struct speicher?
-
Hallo also eine frage:
Ich lese eine CSV datei ein, speichere den Inhalt in ein Struct:
typedef struct persons Persons struct persons{ char name[30]; char geschlecht[20]; int alter; };
FILE *input; input = fopen(argv[1],"r"); Persons *p; char data[54]; char *tmp; while(fgets(data,54,input)!=NULL) { tmp = strtok(data,";"); strcpy(p[i].name,tmp); tmp = strtok(NULL,";"); strcpy(p[i].geschlecht,tmp); tmp = strtok(NULL,"\n"); alter = atoi(tmp); p[i].alter = alter; i++; }
Ich hab jetzt versucht in der whileschleife jeweils für einen neuen Struct eintrag:
p=(Persons*) malloc(sizeof(Persons));
Speicher zu allokieren. Jedoch ist nur der letzte Eintrag im Struct korrekt, die anderen haben anscheinend den Speicher verloren (ausserhalb der while schleife). Jetzt habe ich eine Funktion geschrieben die mir die Zeilen zählt und dann somit vor der schleife den Speicher reserviert. Übergebe dabei *input. Jedoch muss ich dann *input 2 mal einlesen (fopen). Der Speicherbedarf ist dabei (denk ich) größer. Wieso klappt das nicht mit der dynamischen Allokierung in der Schleife?
LG
-
in z.3 "Persons *p;" p ist ein zeiger und kein zeiger array...
also eher sowas "Persons *p[1024]={};"alternativ kannst den zeiger in dein struct mit rein packen und damit eine einfach verkettete liste anlegen, evtl. so
typedef struct _persons{ char name[30]; char geschlecht[20]; int alter; struct _persons *next; }Persons; .... FILE *input; input = fopen(argv[1],"r"); Persons *p = malloc(sizeof(Persons)); Persons *root = p; char data[54]; char *tmp; if(p){ while(fgets(data,54,input)) { tmp = strtok(data,";"); strcpy(p->name,tmp); tmp = strtok(NULL,";"); strcpy(p->geschlecht,tmp); tmp = strtok(NULL,"\n"); alter = atoi(tmp); p->alter = alter; p->next = malloc(sizeof(Persons)); p = p->next; if(!p){ printf("ERROR_MALLOC"); break; } } } ....
root sollte dann der zeiger zu deinem ersten element sein
lg lolo
-
Danke