Explication ligne de code en C

Fermé
Nniinnaa - 25 oct. 2008 à 12:46
 Manu - 25 oct. 2008 à 16:22
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 vendredi 24 octobre 2008 Statut Membre Dernière intervention 26 octobre 2008 13
25 oct. 2008 à 12:48
g ponse que c le delphi mais le c ????????
0
bitrate Messages postés 439 Date d'inscription vendredi 25 avril 2008 Statut Membre Dernière intervention 22 mars 2011 98
25 oct. 2008 à 13:16
c'est printf("%s\n",line) pas line[0]
0
tu pourrais m'expliquer pourquoi stp
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
25 oct. 2008 à 14:16
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
25 oct. 2008 à 14:26
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
25 oct. 2008 à 14:36
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836 > dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024
25 oct. 2008 à 14:54
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
25 oct. 2008 à 14:28
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
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
25 oct. 2008 à 15:00
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
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