Bonsoir tout le monde !

Je suis débutante en langage C et suis confrontée à un petit problème, je m'explique :

J'ai un tableau contenant différents mots dans une boucle.
Exemple de valeurs de mon tableau : "bonjour vous tous".

Pour la suite de mon programme je dois structurer mes données, c'est à dire identifier chaque mots de chaque ligne, j'insère donc les mots dans un tableau à 2 dimensions (tab[9][8][25]) où 9 représentes le nombre de lignes et 8 le nombre de mots (de 25 caractères maximum) par ligne.

Mon problème est qu'à chaque tour de boucle la valeur de mon tableau change, je n'ai donc pas toujours 3 mots dans mon tableau, j'ai donc codé cela (Je vous préviens c'est du gros bidouillage)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
      char tab[9][8][25]; 
	char ligne[100] ; 
	fgets(ligne, 100,fic) ;
 
	nb = sscanf(ligne, "%s%s%s%s",toto,toto,toto,toto);
	switch (nb) {
	case -1 :sscanf("-1","%s",tab[i]) ; break;
	case 1 : sscanf(ligne,"%s",tab[i][0]); break;
	case 2 : sscanf(ligne,"%s%s",tab[i][0],tab[i][1]); break;
	case 3 : sscanf(ligne,"%s%s%s",tab[i][0],tab[i][1],tab[i][2]);break;
	case 4 : sscanf(ligne,"%s%s%s%s",tab[i][0],tab[i][1],tab[i][2],tab[i][3]; break;
 
	}
Comment auriez-vous coder cela plus proprement ? J'ai vu sur la faq de ce site ce code très intéressant qui permet d'allouer de la mémoire dynamiquement à un tableau à 2 dimensions, j'imagine qu'il faudrait que j'applique cela mais je ne comprends pas le code, je n'ai pas encore eu de cours sur les pointeurs.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
char **tab;
tab= malloc(sizeof(*tab)*9);
for (i=0;i<9;i++){
	tab[i] = malloc(sizeof(**tab)*8);
}
Merci beaucoup par avance et bonne semaine.