Share via


strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l

Recherche le prochain jeton dans une chaîne en utilisant les paramètres régionaux actifs ou les paramètres régionaux spécifiés qui ont été transmis. Des versions plus sécurisées de ces fonctions sont disponibles ; voir , , wcstok_s_strtok_s_l, _wcstok_s_l, , _mbstok_s, _mbstok_s_l.strtok_s

Important

_mbstok et _mbstok_l ne peuvent pas être utilisées dans les applications qui s'exécutent dans Windows Runtime. Pour plus d’informations, consultez Fonctions CRT non prises en charge dans les applications de la plateforme Windows universelle.

Syntaxe

char *strtok(
   char *strToken,
   const char *strDelimit
);
char *_strtok_l(
   char *strToken,
   const char *strDelimit,
   _locale_t locale
);
wchar_t *wcstok( /* Non-standard, define _CRT_NON_CONFORMING_WCSTOK to use */
   wchar_t *strToken,
   const wchar_t *strDelimit
);
wchar_t *wcstok(
   wchar_t *strToken,
   const wchar_t *strDelimit,
   wchar_t **context
);
wchar_t *_wcstok_l(
   wchar_t *strToken,
   const wchar_t *strDelimit,
   _locale_t locale
);
unsigned char *_mbstok(
   unsigned char *strToken,
   const unsigned char *strDelimit
);
unsigned char *_mbstok_l(
   unsigned char *strToken,
   const unsigned char *strDelimit,
   _locale_t locale
);

Paramètres

strToken
Chaîne contenant le ou les jetons.

strDelimit
Jeu de caractères délimiteurs.

locale
Paramètres régionaux à utiliser.

context
Pointe vers la mémoire utilisée pour stocker l’état interne de l’analyseur afin que l’analyseur puisse continuer à partir de l’endroit où il a quitté la prochaine fois que vous appelez wcstok.

Valeur retournée

Retourne un pointeur désignant le prochain jeton trouvé dans strToken. Les fonctions retournent NULL lorsqu’aucun autre jeton n’est trouvé. Chaque appel modifie strToken en remplaçant un caractère Null pour le premier délimiteur qui se produit après le jeton retourné.

Notes

La fonction strtok recherche le prochain jeton dans strToken. Le jeu de caractères dans strDelimit spécifie les délimiteurs possibles du jeton à rechercher dans strToken lors de l’appel en cours. wcstok et _mbstok sont des versions à caractères larges et à caractères multioctets de strtok. Les arguments et la valeur de retour sont wcstok des chaînes à caractères larges. Les argumentmets et la valeur de retour sont _mbstok des chaînes de caractères multioctets. Ces trois fonctions se comportent sinon de façon identique.

La version de deux arguments de wcstok n’est pas standard. Si vous devez utiliser cette version, vous devez définir _CRT_NON_CONFORMING_WCSTOK avant #include <wchar.h> (ou #include <string.h>).

Important

Ces fonctions sont exposées à une menace potentielle liée à un problème de dépassement de mémoire tampon. Les dépassements de mémoire tampon sont une méthode fréquente d'attaque du système, ce qui provoque une élévation des privilèges injustifiée. Pour plus d’informations, consultez Éviter les dépassements de mémoire tampon.

Au premier appel de strtok, la fonction ignore les délimiteurs de début et retourne un pointeur désignant le premier jeton dans strToken, faisant terminer le jeton par un caractère Null. D’autres jetons peuvent être tirés du reste de strToken par une série d’appels à strtok. Chaque appel à strtok modifier en strToken insérant un caractère Null après l’appel token retourné. Pour lire le prochain jeton à partir de strToken, appelez strtok en spécifiant une valeur NULL pour l’argument strToken. L’argument strTokenNULL contraint strtok à rechercher le prochain jeton dans le strToken modifié. L’argument strDelimit peut prendre n’importe quelle valeur d’un appel à l’autre, si bien que le jeu de délimiteurs peut varier.

La valeur de sortie est affectée par le paramètre de catégorie LC_CTYPE des paramètres régionaux. Pour plus d’informations, consultez setlocale.

Les versions de ces fonctions sans suffixe _l utilisent les paramètres régionaux actuels pour ce comportement dépendant des paramètres régionaux. Les versions avec le _l suffixe sont identiques, sauf qu’elles utilisent le paramètre de paramètres régionaux transmis à la place. Pour plus d’informations, consultez Locale.

Remarque

Chaque fonction utilise une variable statique locale de thread pour analyser la chaîne en jetons. Par conséquent, plusieurs threads peuvent appeler simultanément ces fonctions sans effets indésirables. Cependant, dans un thread unique, il est très probable que l’entrelacement d’appels dans l’une de ses fonctions se traduise par une altération des données et des résultats imprécis. Quand il s’agit d’analyser différentes chaînes, terminez l’analyse d’une chaîne avant de débuter celle de la suivante. De même, tenez compte du risque potentiel que représente l’appel de l’une de ces fonctions dans une boucle pendant qu’une autre fonction est appelée. S l’une de ces fonctions met fin à l’autre fonction, une séquence entrelacée d’appels est générée, ce qui a pour conséquence d’altérer les données.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Mappages de routine de texte générique

TCHAR.H Routine _UNICODE et _MBCS non défini _MBCS Défini _UNICODE Défini
_tcstok strtok _mbstok wcstok
_tcstok _strtok_l _mbstok_l _wcstok_l

Spécifications

Routine En-tête requis
strtok <string.h>
wcstok <string.h> ou <wchar.h>
_wcstok_l <tchar.h>
_mbstok, _mbstok_l <mbstring.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_strtok.c
// compile with: /W3
// In this program, a loop uses strtok
// to print all the tokens (separated by commas
// or blanks) in the string named "string".
//
#include <string.h>
#include <stdio.h>

char string[] = "A string\tof ,,tokens\nand some  more tokens";
char seps[]   = " ,\t\n";
char *token;

int main( void )
{
   printf( "Tokens:\n" );

   // Establish string and get the first token:
   token = strtok( string, seps ); // C4996
   // Note: strtok is deprecated; consider using strtok_s instead
   while( token != NULL )
   {
      // While there are tokens in "string"
      printf( " %s\n", token );

      // Get next token:
      token = strtok( NULL, seps ); // C4996
   }
}
Tokens:
A
string
of
tokens
and
some
more
tokens

Voir aussi

Manipulation de chaîne
Paramètres régionaux
Interprétation des séquences de caractères multioctets
strcspn, wcscspn, _mbscspn, _mbscspn_l
strspn, wcsspn, _mbsspn, _mbsspn_l