strtok
, , _strtok_l
, _wcstok_l
wcstok
, , _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. Consultez strtok_s
, _strtok_s_l
, wcstok_s
, _wcstok_s_l
, _mbstok_s
, _mbstok_s_l
.
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 Solutions contre 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 NULL
strToken
provoque strtok
la recherche du jeton suivant dans la modification strToken
. 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 la sortie est affectée par la valeur du paramètre de la catégorie LC_CTYPE
des paramètres régionaux. Pour plus d’informations, consultez setlocale
.
Les versions de ces fonctions sans le 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 routines de texte générique
Routine TCHAR.H |
_UNICODE et _MBCS non définis |
_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înes
Paramètres régionaux
Interprétation des séquences de caractères multioctets
strcspn
, , wcscspn
_mbscspn
, ,_mbscspn_l
strspn
, , wcsspn
_mbsspn
, ,_mbsspn_l