strtok
modifie le tableau d'entrée en écrasant les délimiteurs avec 0s; ce n'est pas que tout après le premier jeton a été retiré ou effacé, c'est juste que vous avez une terminaison de chaîne suivant le premier jeton, donc rien après l'impression.
Par exemple:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
char str[] = "This is a test";
printf("before strtok: ");
for (size_t i = 0; i < sizeof str; i++)
{
if (isprint(str[i]))
putchar(str[i]);
else
putchar('.');
}
putchar ('\n');
char *token = strtok(str, " ");
while (token)
{
printf("token = %8s, str = ", token);
for (size_t i = 0; i < sizeof str; i++)
{
if (isprint(str[i]))
putchar(str[i]);
else
putchar('.');
}
putchar('\n');
token = strtok(NULL, " ");
}
printf("after all strtok: ");
for (size_t i = 0; i < sizeof str; i++)
{
if (isprint(str[i]))
putchar(str[i]);
else
putchar('.');
}
putchar('\n');
return 0;
}
est ici la sortie (un .
représente un 0 dans ce cas):
before strtok: This is a test.
token = This, str = This.is a test.
token = is, str = This.is.a test.
token = a, str = This.is.a.test.
token = test, str = This.is.a.test.
after all strtok: This.is.a.test.
Après les strtok
appels, tous les autres jetons sont toujours là, mais parce que nous avons remplacé les espaces vides par 0, toutes les routines de traitement de texte habituelles (strcpy
, strcat
, printf
, puts
, etc.) ne voient que le premier jeton.
Si vous souhaitez conserver le contenu de la chaîne d'origine, vous devrez les copier dans un autre tampon et exécuter les appels strtok
sur ce tampon.
Avez-vous lu la documentation de ce que 'strtok()' * fait * réellement? – EOF
'strtok()' fonctionne en écrasant les délimiteurs avec des octets nuls, de sorte que chaque jeton devienne une chaîne distincte. Si vous avez besoin de la chaîne originale, faites-en une copie avant d'utiliser 'strtok()'. – Barmar
non non .... par exemple temp-> author est "bon jovi" .... à la première itération next_token obtient "bon" mais sur la seconde supprime tout de temp-> author sauf "bon" et ne peut pas aller à –