Bonsoir,
Quelques remarques préliminaires :
- tab =(char*)malloc(cpt*sizeof(char)); : le cast de malloc() est inutile en C. Vérifier cette allocation serait mieux
- ligne 26 : vérifier if(fichier != NULL), c'est bien, mais avant la première utilisation (ligne 18), c'est mieux
- Plutôt que d'utiliser getch() et <conio.h>, qui ne sont absolument pas portables, utilise getchar() inclu dans <stdio.h>.
- Ton utilisation de feof() n'est pas correcte. Cf FAQ A quoi sert la "fonction" feof ?
- mot étant un tableau, tu ne peux pas faire mot = ""; (qui au passage est inutile vu la suite). mot[0] = '\0';.
1 2
| printf ("tab[%d] = %s ",i,tab[i]);
printf("\n"); |
Tu peux directement inclure \n dans la première ligne : printf ("tab[%d] = %s\n",i,tab[i]);
Venons-en maintenant au cœur de ton problème
Pour commencer, tu te sers d'un simple pointeur sur char char *tab; pour stocker plusieurs chaînes de caractères.
La ligne
tab = (char*)malloc(cpt*sizeof(char));
ne fait qu'allouer de l'espace pour cpt caractères. Et chaque tab[i] ne peut stocker en fait qu'un caractère.
D'où l'erreur que tu as à la ligne printf ("tab[%d] = %s ",i,tab[i]); qui te dit que %s voudrait bien un char * et non char.
Une autre erreur qui découle en partie de la précédente : tab[i]=mot;.
L'erreur que tu as vient du fait que tu mets l'adresse d'un tableau à la place d'un caractère char donc.
Mettons que tu aies corrigé l'erreur précédente et que tab[i] représente bien un char *. Tu n'auras alors plus d'erreur lors de la compilation... Mais qu'en est-il lors de l'exécution ? Je te laisse le découvrir
Un indice : mot n'est qu'un tableau dont l'adresse est fixe, et dont tu remplaces le contenu à chaque lecture.
Bonne continuation
Partager