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 : 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;
}
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
 
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 : 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);}
}
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 !