[débogage] Découper une chaine puis placer les sous-chaines dans un tableau
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:
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 ... :lol: