Tout le monde adore les pointeurs
...et moi aussi. A part quand ils marchent pas. je m'explique.
Je fais appel à une sous-fonction nommée lireligne, qui lit les lignes d'un document qu'on lui passe en parametre (une ligne de début et une ligne de fin). Cette fonction renvoie un char * par ligne, donc un tableau de char *, donc un char **. Voici la fonction :
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
| #include "biblio.h"
//cette fonction lit les lignes d'un fichier dont le chemin est passe en argument.
//elle renvoie un tableau de chaines de caracteres correspondant au contenu du document de la ligne debut jusqu'a la ligne fin
char ** lireligne(char* nomfichier, int lignedebut, int lignefin)
{
int i;
FILE * fichier;
char * donnees[1+lignefin-lignedebut];
char temp[512];
fichier = fopen (nomfichier, "r");
for (i = 1; i < lignedebut ; i++)
{
fgets(temp, sizeof(temp), fichier);
}
for (i = 0; i <= (lignefin-lignedebut) ; i++)
{
fgets(temp, sizeof(temp), fichier);
donnees[i] = (char *)malloc(sizeof(char)*strlen(temp));
strcpy(donnees[i], temp);
}
fclose(fichier);
return donnees;
} |
Cette fonction marche, vous pouvez me croire. Le problème c'est quand j'essaie de la récupérer dans un programe père :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include "biblio.h"
void* parser(void *p)
{
int i;
printf("debut du parsing des fichiers GRE et FNR...\n");
char ** donnees = NULL;
donnees = lireligne("test.csv", 1, 6);
for(i = 0; i < sizeof(donnees) ; i++)
{
printf(donnees[i]);
}
return NULL;
} |
parce que bizarrement la valeur de données ne voudra jamais changer de 4... alors que sizeof(donnees) dans lireligne vaut 64 (pour cet exemple).
Pouvez-vous m'aider? Merci!