Explication ligne de code en C

Nniinnaa -  
 Manu -
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. kamine041131 Messages postés 12 Statut Membre 13
     
    g ponse que c le delphi mais le c ????????
    0
  2. bitrate Messages postés 441 Date d'inscription   Statut Membre Dernière intervention   98
     
    c'est printf("%s\n",line) pas line[0]
    0
    1. Nniinnaa
       
      tu pourrais m'expliquer pourquoi stp
      0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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];
    ...
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
      0
      1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        pas 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"};
        0
      2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Pas d'accord non plus.
        char* line[5] est équivalent à char * (line[5]) et non à char (*line)[5]
        0
  4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    while (fgets(line, sizeof line, fp), !feof(fp))
    Il doit y avoir une erreur dans ta ligne.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Manu
     
    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
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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]
      0
  7. Manu
     
    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
    0