...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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Pouvez-vous m'aider? Merci!
Partager