Bonjour,
J'ai un petit soucis avec une fonction que j'ecris,
Elle fonctionne un peu comme Explode de php, c'est à dire qu'elle segmente une chaine selon un separateur.
Elle est specifique à mon soft car les chaines qu'elle doit segmenter sont formater de façon à avoir toujours un separateur final :
ex : test;Toto;paul;
Ma fonction :
Quand je la debug avec le code qui est commenté, tout va bien,
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 void strExplode(const char* sChaine, const char separator, int iLnOfExpMax, char **sOutExp, int *iOutNExp){ int i, iDeb = 0, // Marque le debut d'une nouvelle chaine iIndice = 0, // OffSet de parcours dans le tableau de chaine ln = strlen(sChaine); // Longueur totale de la chaine (*iOutNExp) = 0; // nombre de separateur trouve // Nombre d'occurence du separateur dans la chaine for(i=0; i<ln; i++){ if (sChaine[i] == separator){ (*iOutNExp)++; } } // Allocation de la mémoire sOutExp = (char **) malloc ( (*iOutNExp) * sizeof (char *) ); // allocation d'un tableau de pointeur sur "iOutNExp" chaines for(i=0; i<(*iOutNExp);i++){ *(sOutExp+i) = (char *) malloc ( iLnOfExpMax * sizeof (char) ); // allocation d'une chaine de longueur "iLnOfExpMax" } for(i=0; i<ln; i++){ if (sChaine[i] == separator){ strncpy(*(sOutExp+iIndice), sChaine + iDeb, i-iDeb); // copie du segment selectionne *( *(sOutExp+iIndice) + i - iDeb) = 0; // caractere de fin de chaine iIndice++; iDeb = i+1; // Repositionnement de l'OffSet } } /* for (i=0; i<(*iOutNExp); i++){ gotoxy(0,4+i); printf("%s", sOutExp[i]); } // Libération de la memoire for(i=0; i<(*iOutNExp);i++){ free( *(sOutExp+i) ); } free(sOutExp); /**/ }
je recupere bien mes chaines de caracteres
Seulement, quand jeveux l'utiliser apres, ca plante (nb: je developpe en embarqué, mon plantage est en fait : l'ecran video est remplis de caractere illisible et le soft est figé)
Voila comment je tente de l'utiliser :
A votre avis, cela peut venir d'ou ?
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 int iNbrTarif; char **tarif; strExplode("test;Toto;paul;", ';', 36, tarif, &iNbrTarif); for (i=0; i<iNbrTarif; i++){ gotoxy(0,4+i); printf("%s", tarif[i]); } // Libération de la memoire for(i=0; i<iNbrTarif;i++){ free( *(tarif+i) ); } free(tarif);
Partager