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**));


Anmelden zum Antworten