fonction découpage d'un char* : problèmes (pointeur null + segmentation fault)
Bonjour !
j'essaye de réaliser une fonction classique : le but est de découper un char* selon un certain délimiteur. La fonction renvoie le nombre de mots obtenus.
data : le pointeur vers le char** où les mots sont rangés
message : le message à découper
delim : le délimiteur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
int cut(char*** data, char* message, const char delim){
int compteur_mots = 0;
int i = 0;
while(*(message+i)){
if(*(message+i) == delim){
**(data+compteur_mots) = giveS(message,0,i-1);
compteur_mots++;
message+=i+1;
i=-1;
*data = realloc(*data,sizeof(char**)*(compteur_mots+1));
}
i++;
}
**(data+compteur_mots) = giveS(message,0,strlen(message));
compteur_mots++;
return compteur_mots;
} |
récupère un mot de codemess (du caractère n° begin au caractère n° end)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
char* giveS(char* codemess, int begin, int end){
if (codemess != NULL){
char* thing = malloc(strlen(codemess));
strcpy(thing,codemess+b);
if(b < e){
thing[e-b+1] = '\0';
thing = realloc(thing,strlen(thing));
return thing;
}else{
fprintf (stderr, "Error begin > end\n");
free(thing);
return NULL;
}
}else{
return NULL;
}
} |
et le main pour tester tout ça
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
#define test "hello world ..." //à modifier pour tester sur différentes phrases
int main(){
char* c = malloc(strlen(test)+1);
strcpy(c,test);
*(c+strlen(test)) = '\0';
char** data = malloc(sizeof(char**));
int t = cut(&data,c,' ');
int i;
for(i=0;i<t;i++){ printf("%d : %s\n",t,*(data+i)); fflush(stdout);}
} |
Problèmes :
-> je n'arrive à récupérer que le 1er mot (pour le coup, tout va bien pour lui)
-> pour ce qui est du 2eme et 3eme mot, en l'affichant dans la fonction cut je vois qu'il sont bien en 2eme et 3emeposition de *data, mais lorsque je veux l'afficher dans le main, je vois (NULL)
-> si j' ajoute un mot de plus à ma phrase : segmentation fault.
(j'ai enlevé les printf de test ici)
Avez-vous des avis sur ça ?
Merci à vous !