Bonjour,

Tous est dans le titre ...
Je vous donne l'allure de la chaine :
char* returnValue="nom1\tval1\nnom2\tval2\n..."
Je récupère cette variable après l'appel à une fonction.

Je souhaiterais récuperer uniquement les nom et les placer dans un tableau.
Le tout dynamiquement.

J'ai un code, que j'esperais efficace, qui ne l'est pas. A chaque appel ma chaine se dégrade, les données deviennent hasardeuses, je ne sais pas ou ca coince.

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
 
char **tab = NULL;
int i=0;
char *tmp = NULL;
size_t posT;
size_t posN;
 
while(returnValue!=NULL){
	posT=strcspn(returnValue,"\t");
	if( ( tab = (char**) realloc (tab, (i+1)*sizeof(char*)) ) == NULL || (tab[i]=(char*)malloc(posT+1)) == NULL){
	      fprintf (stderr, "Memoire insuffisante\n");
	      free (tab);
		tab = NULL;
		exit (EXIT_FAILURE);
	}
 
	strncpy(tab[i],returnValue,posT);
	PA_Alert(tab[i]);
	posN = strcspn(returnValue,"\n");
	size_t sub = strlen(returnValue)-posN;
 
	if(sub==0){
		free(returnValue);
		returnValue=NULL;
	}else{
		tmp=(char*)malloc(strlen(returnValue)+1);
		strcpy(tmp,returnValue);
		size_t test2 = strlen(tmp);
		free(returnValue);
		returnValue=NULL;
		returnValue = (char *)malloc(sub);
		int j;
		for(j=0;j<sub;j++){
			if(j==sub-1) returnValue[j]="\0";
			else returnValue[j]=tmp[j+posN+1];
	}
	free(tmp);
	tmp = NULL;
	i++;
}
Si vous avez une idée ...