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.
Si vous avez une idée ...
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++; }![]()
Partager