[c] Wczytanie zawartości pliku do tablicy wskaźników

0

Chciałbym zrobić tablicę wskaźników z danych wczytanych z pliku. To jest to co próbowałem zrobić i nie wyszło niestety:

#define MAX_NUM_ELEMENTS 512
...
char **filename;
...
   buf = malloc(MAX_NUM_ELEMENTS);
    n = 0;
   for(i = 0, j=0; (*(buf + i) = getc(inp)) != EOF; i++, j++){
        if(i >= MAX_NUM_ELEMENTS){
            if( (tmp = realloc(buf, 2 * i)) == NULL)
                break;
            else
                buf = tmp; 
        } 
     if(*(buf + i) != '\n')
        *(*(filename + n) + j) = *(buf + i);
     else{
        j=-1;
        n++;   
      }
    }
        for(i = 0; i < n; i++){
            printf("%s\n", *(filename + i));
    }
...
free(buf);
return 0;
}

Plik, z którego pobieram dane, ma postać:

plik.txt
plik1.txt
plik2.txt
...

Co ja tutaj robie zle??
Dodam, że wcześniej zrobiłem to w ten sposób i wszystko działało w porządku:

#define MAX_NUM_ELEMENTS 512
...
char filename[30][32];
...
   buf = malloc(MAX_NUM_ELEMENTS);
    n = 0;
   for(i = 0, j=0; (*(buf + i) = getc(inp)) != EOF; i++, j++){
        if(i >= MAX_NUM_ELEMENTS){
            if( (tmp = realloc(buf, 2 * i)) == NULL)
                break;
            else
                buf = tmp; 
        } 
     if(*(buf + i) != '\n')
        filename[n][j] = *(buf + i);
     else{
        j=-1;
        n++;   
      }
    }
    
    for(i = 0; i < n; i++){
      printf("%s\n", filename[i]);
    }
...
free(buf);
return 0;

Czy dobrze zamieniłem *(*(filename + n) + j) = *(buf + i);
na filename[n][j] = *(buf + i); i poprawnie wyświetlam?printf("%s\n", *(filename + i));

0

0)zmiana wyglada na prawidlowa, ale.. :

char** filenames; 
  • ale jak rozumiem, odpowiednio inicjalizujesz to gdzies w tym wycietym fragmencie..?
   for(i = 0, j=0; (*(buf + i) = getc(inp)) != EOF; i++, j++){
        if(i >= MAX_NUM_ELEMENTS){
            if( (tmp = realloc(buf, 2 * i)) == NULL)
                break;
            else
                buf = tmp; 
        } 

a kiedy Ty to i (albo MAX_NUM_ELEMENTS ]:>)po reallocu zmieniasz? bo po pierwszym trafieniu w if i>= potem zazynasz ciaglymi reallocami.. nie lepiej to jakos blokowo, nie bajt-po-bajcie..?

1 użytkowników online, w tym zalogowanych: 0, gości: 1