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 :
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);
    /**/
}
Quand je la debug avec le code qui est commenté, tout va bien,
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 :
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);
A votre avis, cela peut venir d'ou ?