dynamisches String-Array in einer Funktion erstellen
-
Hallo,
Das ganze soll mal ein Textviewer in der Konsole werden.
Ich hab in der main Funktion das char Array **Data in dem ich die Datei zeilenweise mit load einlese.int main(int argc, char *argv[]){ char **Data; int puffer_size=100; int Data_Zeilen=0; if(argc>1) load(argv[1],&puffer_size,&Data,&Data_Zeilen); printf("\n%s",Data[0]); system("pause"); return 0; }
und nun zum Problem, die load Funktion.Wenn ich das Programm starte, das sich ohne Compilerfehler übersetzen lässt gibt es mir die ersten 2 puffer langen Zeilen aus.(die erste Zeile in der Datei ist dreimal solang wie der puffer)
int load(char *filename,int *puffer_size,char ***Data,int *Data_Zeilen){ FILE *file; char puffer[*puffer_size]; file=fopen(filename,"r"); if(file==NULL) return -1; while(fgets(puffer,*puffer_size,file)!=NULL){ if(*Data_Zeilen==0) *Data=malloc(sizeof(char *)); else *Data=realloc(*Data,sizeof(char *)*(*Data_Zeilen)); *Data[*Data_Zeilen]=malloc(sizeof(*Data[*Data_Zeilen])*(strlen(puffer)+1)); strcpy(*Data[*Data_Zeilen],puffer); printf("%s\n",*Data[*Data_Zeilen]); (*Data_Zeilen)++; } return 0; }
das ändern der ersten Zeile in eine puffer große oder gar kleinere hat keinen effekt, es werden immer die ersten 2 "puffer-Zeilen" ausgegeben!
Aber warum nur die ersten 2 "puffer-Zeilen" ?
Was mache ich falsch ?MfG
sam_sam
-
Hab den Fehler jetzt endlich gefunden
Hier die richtige load Funktion:int load(char *filename,int *puffer_size,char ***Data,int *Data_Zeilen){ FILE *file; char puffer[*puffer_size]; file=fopen(filename,"r"); if(file==NULL) return -1; while(fgets(puffer,*puffer_size,file)!=NULL){ if(*Data_Zeilen==0) *Data=malloc(sizeof(char *)); else *Data=realloc(*Data,sizeof(char *)*(*Data_Zeilen+1)); (*Data)[*Data_Zeilen]=malloc(sizeof((*Data)[*Data_Zeilen])*(strlen(puffer)+1)); strcpy((*Data)[*Data_Zeilen],puffer); printf("%s\n",(*Data)[*Data_Zeilen]); (*Data_Zeilen)++; } return 0; }
Änderungen:
*Data[[*Data_Zeilen] -> (*Data)[Data_Zeilen]
*Data=realloc(*Data,sizeof(char )(Data_Zeilen+1**));