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.
A voir également:

6 réponses

kamine041131 Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   13
 
g ponse que c le delphi mais le c ????????
0
bitrate Messages postés 441 Date d'inscription   Statut Membre Dernière intervention   98
 
c'est printf("%s\n",line) pas line[0]
0
Nniinnaa
 
tu pourrais m'expliquer pourquoi stp
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637 > fiddy Messages postés 11069 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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > dubcek Messages postés 18789 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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
while (fgets(line, sizeof line, fp), !feof(fp))
Il doit y avoir une erreur dans ta ligne.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
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