Après 2 ans d'inactivité en langage C, je me relance dedans. Et avec des pointeurs, même pas peur.
Sauf que je n'y arrive pas, et il me semble à cause d'une erreur de débutant...
Voilà, j'ai un fichier tabulé à parser qui ressemble à ceci :
j'ai une fonction file2matrice qui doit me permettre de placer dans 3 vecteurs les 2 dernières colonnes ainsi que le dernier chiffre de la première colonne, et qui me rend le nombre de lignes lues :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Hs:NCBIv35:chr1 1703 13.07712 Hs:NCBIv35:chr1 1736 14.447635 Hs:NCBIv35:chr1 1769 14.679797 Hs:NCBIv35:chr1 1799 14.679797
pour l'instant je ne charge que les deux dernières colonnes. la dernière boucle étant là pour vérifier les données contenues dans les deux vecteurs concernés.
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 int file2matrice(FILE * fichier, int * chr, int * pos, double * val){ int nb_lignes_lues = 0;//nombre de lignes lues int i;//variable bidon char ligne [LG_MAX];//longueur max lue dans un fichier char ** contenu;//contenu de la ligne splittée par tabulation while(fgets(ligne, LG_MAX, fichier) != NULL) { //on récupère le contenu de ligne contenu = str_split(ligne,"\t");//fonction pour splitter une ligne //on alloue de la mémoire supplémentaire pos = realloc(pos, (nb_lignes_lues+1)*sizeof(int)); val = realloc(val, (nb_lignes_lues+1)*sizeof(double)); *(val+nb_lignes_lues) = atof(*(contenu+2)); *(pos+nb_lignes_lues) = atoi(*(contenu+1)); nb_lignes_lues++; }//while //verification for(i=0;i<nb_lignes_lues;i++){ printf("%f\t",*(val+i)); printf("%d\n",*(pos+i)); } return nb_lignes_lues; }
Jusqu'ici tout va bien, j'ai bien les bonnes données enregistrées. Mais dans le main, je lance la fonction :
j'ai en réponse avec la dernière boucle soit 0 soit des valeurs fantaisistes. Alors à quel moment mon pointeur perd son adresse?
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 int main(int argc , char *argv[]){ FILE * f; int * chrom = (int*) malloc(1*sizeof(int)); int * position = (int*) malloc(1*sizeof(int)); double * pvalue = (double*) malloc(1*sizeof(double)); int i; //variable bidon int taille = 0;//nombre de lignes enregistrées //importation du fichier f = fopen("/home/data/test2.txt","r"); if(f==NULL){ perror("fichier 1\n"); } taille = file2matrice(f, chrom, position, pvalue); fclose(f); printf("%d lignes lues\n",taille); for(i=0;i<taille;i++){ printf("%f\t",*(pvalue+i)); printf("%d\n",*(position+i)); } return 0; }
Merci pour vos réponses
Partager