Bonjour,
j'ai un petit problème avec les tableaux de chaines de caractères(char**)
Je souhaite stocker dans ce tableau les differents blocs de caracteres contenu dans une chaine de caractere.
Par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
char** argv;
int size=test("aa bb", argv);
int i;
for(i=0; i<j; i++){
printf("%s\n", argv[i]);
}
devrait m'afficher "aa" puis "bb"

Mon probleme est que j'ai une erreur de segmentation lorsque que je veut reutiliser argv dans le main.
Par contre si j'affiche argv dans ma fonction test il n'y a pas de probleme.

Voici mon code en espérant que quelqu'un pourra m'aider:

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
 
/*permet de stocket les blocs de caractère le buff dans le tableau de char* argv*/
int test(char* buff, char** argv){
	char* buff2=malloc(1);	/*stocke temporairement un block de caractere*/
	int i=0;	/*position dans buff*/
	int j=0;	/*taille de argv*/
	int stop=0;	/*indique la fin de la chaine buff*/
	while(!stop){
		/*On recupere le premier bloc de caractere*/
		while(buff[i]!=' ' && buff[i]!='\0'){
			buff2=realloc(buff2, strlen(buff2)+2);
			sprintf(buff2, "%s%c", buff2, buff[i]);
			i++;
		}
		/*si lz bloc n'est pas vide on le stocke dans argv*/
		if(strlen(buff2)>0){
			argv=realloc(argv, (j+1)*sizeof(char*));
			argv[j]=malloc(strlen(buff2)+1);			
			strcpy(argv[j], buff2);
			j++;
 
		}
		/*on se déplace dans buff tant qu'on a des espaces*/
		while(buff[i]==' ') i++;
		if(buff[i]=='\0'){
			stop=1;
			printf("STOP\n");
		}
		/*on reinitialise buff*/
		buff2=realloc(NULL, 1);
		strcpy(buff2, "\0");
	}
 
	/*1er affichage de argv*/
	for(i=0; i<j; i++){
		printf("%s\n", argv[i]);
	}
	return j;
}
 
main(){
 
	char** argv=malloc(sizeof(char*));
 
 
	int j=test("aa b", argv);
 
 
	int i;
	for(i=0; i<j; i++){
		printf("%s\n", argv[i]);
	}
 
	return 0;
 
}
Aucun probleme a la compilation
mais a l'exécution j'ai :
aa
b
/*L'affichage dans la fonction test marche*/
erreur de segmentation