Si j'ai bien compris le man, le troisième argument sert de buffer.
Mais si strtok_r ne fait qu'une simple affectation :
Si entre deux strtok_r ont modifie la chaîne de caractère, on va modifier le contenu pointé par ptrptr.Code:
1
2
3
4
5
6
7 char *strtok_r (char *s, const char *delim, char **ptrptr) { if(s != NULL) *ptrptr = s; }
Il est bien plus probable que strtok_r fasse :
De plus ptrptr est un buffer, il doit donc sûrement être modifié à chaque utilisation de strtok_r sans modifier s.Code:
1
2
3
4
5
6
7
8
9
10 char *strtok_r (char *s, const char *delim, char **ptrptr) { if(s != NULL) { *ptrptr = malloc(sizeof(char)*(strlen(s)+1)); strcpy(*ptrptr, s); } }
EDIT : http://www.student.cs.uwaterloo.ca/~...8c-source.html
Apparement strtok_r ne fait qu'une simple affectation. Il faut donc faire attention lorsqu'on l'utilise (c'est pas une fonction très sûre et très propre).