Tableaux de pointeurs
luminou
-
pascal -
pascal -
Bonjour,
J'essaye d'implémenter une fonction afin de remplir un tableau de chaine de caractère, par chaque ligne d'un fichier texte. Je ne comprends pas car je boucle, et si je lui demande d'affecter à la valeur tab[2] la chaine correspondante, il me l'affecte également à tab[0] à tab [1].... AU final, je me retrouve donc avec une tableau dont les pointeurs pointent sur une même et unique chaine ! HELPPPPPPPPPPP ! Voici le code , et merci d'avance
void lister(int taille,char *tab[N],FILE *fichier){
int i=0;
char logfic[7];
for(i;i<taille;i++){
fscanf(fichier,"%s\n",&logfic);
tab[i]=logfic;
}
}
J'essaye d'implémenter une fonction afin de remplir un tableau de chaine de caractère, par chaque ligne d'un fichier texte. Je ne comprends pas car je boucle, et si je lui demande d'affecter à la valeur tab[2] la chaine correspondante, il me l'affecte également à tab[0] à tab [1].... AU final, je me retrouve donc avec une tableau dont les pointeurs pointent sur une même et unique chaine ! HELPPPPPPPPPPP ! Voici le code , et merci d'avance
void lister(int taille,char *tab[N],FILE *fichier){
int i=0;
char logfic[7];
for(i;i<taille;i++){
fscanf(fichier,"%s\n",&logfic);
tab[i]=logfic;
}
}
A voir également:
- Tableaux de pointeurs
- Tableaux croisés dynamiques - Guide
- Fusionner deux tableaux excel - Guide
- Les tableaux word - Guide
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). - Forum Musique / Radio / Clip
- Impossible d'afficher le rapport de tableau croisé dynamique sur un rapport existant ✓ - Forum Excel
1 réponse
tu te trompe sur le stackage en memoire des chaine de caractere:
ce que tu fais n'est pas permis en C: UNE CHAINE DE CARACTERE NE PEUT PAS ETRE STOCKE DANS UNE CASE MAIS SEULEMENT DANS UN TABLEAU COMPLET(c'est ce qu'il faut retenir).
le mode de fonctionnement des tableaux est plutot complexe( en gros le tableau est un pointeur comme les autres).
En faite ton code n'est meme pas compilable (avec gcc par exemple).
Ton compilateur (surement encore de microsoft!!)est trop permisible il remplace lui meme
tab[i]=logfic; par tab=logfic;(qui est la syntaxe juste)
c'est a dire que chaque case de logfic va etre recopier dans
les cases correspondantes de tab(par passage par addresse).
Le %s met chaque caractere de ta chaine dans chacune des cases de ton tableau(a raison de 1 SEULE caractere par case).Ainsi apres la ligne tab[i]=logfic, tab sera exactement pareil que logfic et peu importe le i.
De plus lorsque tu appele ton tableau tab[i] (par un printf par exemple) avec un "%s" tu va avoir l'integralite de ton tableau qui s'affiche( et non pas la case i(il faudrait un %c)).
voila d'ou vient le faite que toute les cases de ton tableau affiche la meme chaine quand tu fais printf("%s",tab[i]);
(que ton compilteur remplace par printf("%s",tab); )
(en faite c'est ton tableau qui contient la chaine, chaque case contenant un seul caractere de cette chaine).
Avec ces nouveau element cherche un peu une solution et si tu n'en trouve pas dis le moi et je te donnerais alors la solution a ton probleme.
ce que tu fais n'est pas permis en C: UNE CHAINE DE CARACTERE NE PEUT PAS ETRE STOCKE DANS UNE CASE MAIS SEULEMENT DANS UN TABLEAU COMPLET(c'est ce qu'il faut retenir).
le mode de fonctionnement des tableaux est plutot complexe( en gros le tableau est un pointeur comme les autres).
En faite ton code n'est meme pas compilable (avec gcc par exemple).
Ton compilateur (surement encore de microsoft!!)est trop permisible il remplace lui meme
tab[i]=logfic; par tab=logfic;(qui est la syntaxe juste)
c'est a dire que chaque case de logfic va etre recopier dans
les cases correspondantes de tab(par passage par addresse).
Le %s met chaque caractere de ta chaine dans chacune des cases de ton tableau(a raison de 1 SEULE caractere par case).Ainsi apres la ligne tab[i]=logfic, tab sera exactement pareil que logfic et peu importe le i.
De plus lorsque tu appele ton tableau tab[i] (par un printf par exemple) avec un "%s" tu va avoir l'integralite de ton tableau qui s'affiche( et non pas la case i(il faudrait un %c)).
voila d'ou vient le faite que toute les cases de ton tableau affiche la meme chaine quand tu fais printf("%s",tab[i]);
(que ton compilteur remplace par printf("%s",tab); )
(en faite c'est ton tableau qui contient la chaine, chaque case contenant un seul caractere de cette chaine).
Avec ces nouveau element cherche un peu une solution et si tu n'en trouve pas dis le moi et je te donnerais alors la solution a ton probleme.