La fonction extraire_donnee() permet de lire caractere par caractere une chaine de caractere passee en parametre. Le but etant d'extraire des champs separés par des ';'dans la chaine passe en parametre et de les inserer dans un tableau dynamique de chaines de caracteres. Je ne peux pas utiliser la fonction sscanf car le nombre de champs séparé par des ';' dans la chaine passé en paramètre est variable.
Mon probleme est le suivant : apres le deuxieme champs trouvé et extrait j'ai un mechant plantage (memory fault coredump sous windows = "voulez-vous envoyer l'erreur a MicroSoft).
Quelqu'un peut il m'aider a resoudre ce core car j'ai beau chercher je ne vois pas ou ce situe l'erreur. Merci.
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 #include <stdio.h> #include <stdlib.h> #include <string.h> void extraire_donnees(char *ptr_buffer_lecture) { int ligne = 0; char **ptr; int separateur = 0; int indice; int longueur = 0; ptr = (char**)malloc(sizeof(char*)); ptr[ligne]=(char*)malloc(sizeof(char)); for (indice = 0; ptr_buffer_lecture[indice] != '\0'; indice ++ ) { if ((ptr[ligne]=realloc(ptr[ligne],sizeof(char) * longueur + 1)) == NULL) printf("probleme d'allocation memoire\n"); if(ptr_buffer_lecture[indice] != ';') { ptr[ligne][longueur] = ptr_buffer_lecture[indice]; //printf("ptr[%d][%d]= %c\n",ligne,longueur,ptr[ligne][longueur]); longueur++; } else{ longueur++; separateur++; if (longueur == 1) printf("Probleme de longueur de la chaine\n"); ptr[ligne][longueur - 1 ]='\0'; longueur = 0; printf("*ptr[%d]= %s\n",ligne,ptr[ligne]); if((ptr=realloc(ptr,sizeof(char*) * (separateur + 1))) == NULL ) printf("probleme d'allocation memoire 2 \n"); ligne++; ptr++; } } for (ligne = 0; ligne <separateur;ligne++) printf("*ptr[%d]= %s\n",ligne,ptr[ligne]); } int main(void) { char *test ="CATEGORIE;REFERENCE;C012 EQ TAB12;C056 GT TAB056A TAB056B;\0"; printf("test = %s\n",test); extraire_donnees(test); return EXIT_SUCCESS; }
Partager