Explication ligne de code en C

Bonjour,

je ne comprends pas comment fonctionne cette ligne de code .Quelqu'un pourrait-il m'aider

char * line[255];
...

while (fgets(line, sizeof line, fp), !feof(fp))
printf("%s", line);

ou fp est le pointeur de notre fichier.

J'aimerais savoir plus précisément, si lorsqu'on fait cette boucle while,comment sont stockés les caractères récupérés ligne par ligne dans line.Et pourquoi lorsqu'on tape printf("%s",line[0]),ça plante à l'exécution(ça compile).De plus,est-ce que cette boucle permet bien de récupérer toutes les lignes jusqu'à la fin du fichier ?
Merci.
Configuration: Windows XP
Internet Explorer 7.0

6 réponses

  1. c'est printf("%s\n",line) pas line[0]
    1. tu pourrais m'expliquer pourquoi stp
  2. Contributeur
    hello
    ça c'est un tableau de 255 pointeurs de type char : char * line[255];
    ca c'est un tableau de 255 élements de type char, un string : char line[255];
    ...
    1. Contributeur
      Salut,
      ça c'est un tableau de 255 pointeurs de type char : char * line[255];
      Non, c'est un pointeur sur un tableau de 255 éléments. L'équivalent est char *(line[255])
      Cdlt
    2. Contributeur
      @fiddypas d'accord, char line[255]; line est un pointeur line[0] == * line

      ca c'est un tableau de pointeurs sur des strings:
      char* line[5] = {"AAAA","BBBB","CCCC","DDDD","EEEE"};
    3. Contributeur
      @dubcekPas d'accord non plus.
      char* line[5] est équivalent à char * (line[5]) et non à char (*line)[5]
  3. Contributeur
    while (fgets(line, sizeof line, fp), !feof(fp))
    Il doit y avoir une erreur dans ta ligne.
    1. Bonjour,

      Salut,
      ça c'est un tableau de 255 pointeurs de type char : char * line[255];
      Non, c'est un pointeur sur un tableau de 255 éléments. L'équivalent est char *(line[255])
      Cdlt


      Non !

      #include <stdio.h>

      main()
      {
      char line[255];
      char *ptrs[255];

      printf("sizeof(line) %d\n",sizeof(line));
      printf("sizeof(ptrs) %d\n",sizeof(ptrs));
      }

      donne :

      sizeof(line) 255
      sizeof(ptrs) 1020

      Jusqu'à nouvel ordre char *ptrs[255]; réserve 255 pointeurs, à l'analogue de (char*)ptrs[255];

      Manu
      1. Contributeur
        Non.
        T'as qu'à afficher le sizeof des deux dans ton programme. Et tu verras que c'est la même taille.
        Par exemple :
        #include <stdio.h>
        
        int main(void){
            char *ptrs1[255];
            char *(ptrs2[255]);
            char (*ptrs3)[255];
        
            printf("sizeof(ptrs1) %d\n",sizeof(ptrs1));
            printf("sizeof(ptrs2) %d\n",sizeof(ptrs2));
            printf("sizeof(ptrs3) %d\n",sizeof(ptrs3));
            return 0;
        }
        
        Execution :    
        sizeof(ptrs1) 1020
        sizeof(ptrs2) 1020
        sizeof(ptrs3) 4
        

        Donc, char* ptrs[255] est analogue à char *(ptrs[255]) et non à char (*ptrs)[255]
    2. Rebonjour,

      Donc, char* ptrs[255] est analogue à char *(ptrs[255]) et non à char (*ptrs)[255]

      Je suis bien d'accord, et je n'ai pas prétendu le contraire... vous avez déplacé mes parenthèses explicatives.

      Manu