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
récupère un mot de codemess (du caractère n° begin au caractère n° end)
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 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; }
et le main pour tester tout ça
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 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; } }
Problèmes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);} }
-> 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 !
Partager