Remplissage d'un tableau 2D avec des char*
Bonjour,
Je vous explique le contexte : je souhaite récupérer des informations dans un fichier, et les enregistrer dans un tableau 2D. Chaque ligne de mon fichier est constituée de 3 informations, séparées les unes des autres par des tabulations.
J'ai donc écrit le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| char *** recupInfosFichier (char * nomFichier, int nbLignesRecup) {
int i;
// Allocation de la mémoire
char *** tab = (char***) malloc (nbLignesRecup * sizeof(char**));
for (i = 0; i < nbLignesRecup; i++) {
tab[i] = (char**) malloc (3 * sizeof (char*));
}
// Ouverture et lecture du fichier
FILE* fich = NULL;
fich = fopen(nomFichier,"r");
if (fich == NULL) {
printf("Impossible d'ouvrir le fichier %s\n", nomFichier);
return NULL;
}
char ligne[500] = "";
i = 0;
int j;
char * str;
while (i < nbLignesRecup && fgets(ligne,500,fich) != NULL) {
for (j = 0, str = ligne; j < 3; j++, str = NULL) {
tab[i][j] = strtok(str,"\t"); // Séparation des informations
printf("i:%d j:%d %s\n",i,j, tab[i][j]);
}
i++;
}
printf("\nRESULTAT\n");
for (i=0; i < nbLignesRecup; i++) {
for (j=0; j < 3; j++) {
printf("%s\n ", tab[i][j]);
}
}
fclose(fich);
return tab;
} |
Mon problème est le suivant : lorsque je vérifie la valeur de mon tab[i][j] après le strtok, celui-ci contient bien l'information récupérée dans le fichier. Par contre, après la fin de la boucle while, lorsque je parcours de nouveau mon tableau, j'ai l'impression que les informations ont été "écrasées" et se chevauchent.
Plus exactement, j'obtiens le résultat suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| i:0 j:0 RMC
i:0 j:1 http://vipicecast.yacast.net/rmc
i:0 j:2 http://www.logotheque.fr/6396-2/logo+RMC+INFO.jpg
i:1 j:0 Radio FG
i:1 j:1 http://radiofg.impek.com/fg6.mp3
i:1 j:2 http://upload.wikimedia.org/wikipedia/commons/1/14/Ectac.FG-Dj-Radio-logo.03.jpeg
i:2 j:0 France Info
i:2 j:1 http://mp3.live.tv-radio.com/franceinfo/all/franceinfo.mp3
i:2 j:2 http://upload.wikimedia.org/wikipedia/commons/thumb/6/64/France_Info.png/120px-France_Info.png
i:3 j:0 Nostalgie
i:3 j:1 http://mp3.live.tv-radio.com/nostalgie/all/nos_113812.mp3
i:3 j:2 http://upload.wikimedia.org/wikipedia/commons/thumb/2/2d/Nostalgie_logo_simple.png/120px-Nostalgie_logo_simple.png
RESULTAT
Nostalgie
algie
m/nostalgie/all/nos_113812.mp3
Nostalgie
talgie/all/nos_113812.mp3
Nostalgie
tp://mp3.live.tv-radio.com/nostalgie/all/nos_113812.mp3
p://upload.wikimedia.org/wikipedia/commons/thumb/2/2d/Nostalgie_logo_simple.png/120px-Nostalgie_logo_simple.png
Nostalgie
http://mp3.live.tv-radio.com/nostalgie/all/nos_113812.mp3
http://upload.wikimedia.org/wikipedia/commons/thumb/2/2d/Nostalgie_logo_simple.png/120px-Nostalgie_logo_simple.png |
J'ai essayé d'effectuer un malloc sur chaque tab[i][j] pensant que le problème venait de là, mais ça n'a rien changé.
Ayant quelques difficultés avec les problèmes de mémoire et pointeurs, je ne sais pas d'où cela peut venir...
Merci par avance pour votre aide :)