void token (char *c, char **ptr, char occ)
{
char *d = c;
int i = 0;
while(1) {
if(*c == occ) {
*c = 0;
ptr[i++] = d; d = c+1;
}
else if(!*c) {
ptr[i] = d;
break;
}
c++;
}
}
char buffer[] = "salut a tous";
char *ptr[3];
token(buffer, ptr, ' ');
ptr[0] contiendra "salut", ptr[1] contiendra "a" et ptr[2] contiendra "tous".
Attention, il ne s'agit que de pointeurs. Ils restent donc dépendants de la chaîne principale (qui ce retrouve donc modifiée). Si tu écrase la chaîne principal, les pointeurs risque de ne plus pointer sur la bonne location.
Si tu veux garder la chaîne principal intacte ou si tu veux la réutiliser pour autre chose, voici une autre routine qui sauvegarde les chaînes dans un tableau à 2 dimensions tout en laissant la principale inchangée:
char buffer[] = "salut a tous", *c = buffer;
char tab[3][12]; // <- 3 mots de chacun 11 char + 0 de fin de chaine
int j = 0;
do {
int k = 0;
while(*c != ' ' && *c) tab[j][k++] = *c++;
tab[j++][k] = 0;
} while(*c++);
tab[0] contiendra "salut", tab[1] contiendra "a" et tab[2] contiendra "tous"
C++ (@++)