Partager via


strtok_s, , _strtok_s_l, _wcstok_s_lwcstok_s, , _mbstok_s_mbstok_s_l

Recherche le prochain jeton dans une chaîne en utilisant les paramètres régionaux actifs ou les paramètres régionaux qui ont été transmis. Ces versions de strtok, _strtok_lwcstok_wcstok_l, , _mbstok, ont _mbstok_l des améliorations de sécurité, comme décrit dans les fonctionnalités de sécurité dans le CRT.

Important

_mbstok_s et _mbstok_s_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_s(
   char* str,
   const char* delimiters,
   char** context
);

char* _strtok_s_l(
   char* str,
   const char* delimiters,
   char** context,
   _locale_t locale
);

wchar_t* wcstok_s(
   wchar_t* str,
   const wchar_t* delimiters,
   wchar_t** context
);

wchar_t *_wcstok_s_l(
   wchar_t* str,
   const wchar_t* delimiters,
   wchar_t** context,
   _locale_t locale
);

unsigned char* _mbstok_s(
   unsigned char* str,
   const unsigned char* delimiters,
   char** context
);

unsigned char* _mbstok_s_l(
   unsigned char* str,
   const unsigned char* delimiters,
   char** context,
   _locale_t locale
);

Paramètres

str
Chaîne contenant le jeton ou les jetons à rechercher.

delimiters
Jeu de caractères délimiteurs à utiliser.

context
Permet de stocker des informations de position entre les appels à la fonction.

locale
Paramètres régionaux à utiliser.

Valeur retournée

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

Conditions d’erreur

str delimiters context Valeur retournée errno
NULL n'importe laquelle pointeur vers un pointeur Null NULL EINVAL
n'importe laquelle NULL tous NULL EINVAL
tous n'importe laquelle NULL NULL EINVAL

S’il str s’agit NULL d’un context pointeur de contexte valide, il n’y a pas d’erreur.

Notes

La strtok_s famille de fonctions recherche le jeton suivant dans str. Le jeu de caractères dans delimiters spécifie les délimiteurs possibles du jeton à rechercher dans str lors de l’appel en cours. wcstok_s et _mbstok_s sont des versions à caractères larges et à caractères multioctets de strtok_s. Les arguments et les valeurs de retour des wcstok_s _wcstok_s_l chaînes à caractères larges. Les arguments et les valeurs de retour des _mbstok_s _mbstok_s_l chaînes de caractères multioctets. Ces fonctions se comportent sinon de façon identique.

Cette fonction valide ses paramètres. Lorsqu’une condition d’erreur se produit, comme dans la table Conditions d’erreur, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions attribuent à errno la valeur EINVAL et retournent NULL.

Au premier appel de strtok_s, la fonction ignore les délimiteurs de début et retourne un pointeur désignant le premier jeton dans str, faisant terminer le jeton par un caractère Null. D’autres jetons peuvent être tirés du reste de str par une série d’appels à strtok_s. Chaque appel à strtok_s modifie str en insérant un caractère Null après le jeton retourné par cet appel. Le pointeur context identifie la chaîne qui est actuellement lue, ainsi que l’endroit dans la chaîne où le prochain jeton doit être lu. Pour lire le prochain jeton à partir de str, appelez strtok_s en spécifiant une valeur NULL pour l’argument str, puis passez le même paramètre context. L’argument NULL str provoque strtok_s la recherche du jeton suivant dans la modification str. L’argument delimiters peut prendre n’importe quelle valeur d’un appel à l’autre, si bien que le jeu de délimiteurs peut varier.

Étant donné que le context paramètre remplace les mémoires tampons statiques utilisées et strtok _strtok_l, il est possible d’analyser deux chaînes simultanément dans le même thread.

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 suffixe _l utilisent les paramètres régionaux de thread actuels pour ce comportement dépendant des paramètres régionaux. Les versions avec le _l suffixe sont identiques, sauf qu’elles utilisent plutôt les paramètres régionaux spécifiés par le locale paramètre. Pour plus d’informations, consultez Locale.

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_s strtok_s _mbstok_s wcstok_s
_tcstok_s_l _strtok_s_l _mbstok_s_l _wcstok_s_l

Spécifications

Routine En-tête requis
strtok_s <string.h>
_strtok_s_l <string.h>
wcstok_s,
_wcstok_s_l
<string.h> ou <wchar.h>
_mbstok_s,
_mbstok_s_l
<mbstring.h>

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

Exemple

// crt_strtok_s.c
// In this program, a loop uses strtok_s
// to print all the tokens (separated by commas
// or blanks) in two strings at the same time.

#include <string.h>
#include <stdio.h>

char string1[] =
    "A string\tof ,,tokens\nand some  more tokens";
char string2[] =
    "Another string\n\tparsed at the same time.";
char seps[]   = " ,\t\n";
char *token1 = NULL;
char *token2 = NULL;
char *next_token1 = NULL;
char *next_token2 = NULL;

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

    // Establish string and get the first token:
    token1 = strtok_s(string1, seps, &next_token1);
    token2 = strtok_s(string2, seps, &next_token2);

    // While there are tokens in "string1" or "string2"
    while ((token1 != NULL) || (token2 != NULL))
    {
        // Get next token:
        if (token1 != NULL)
        {
            printf(" %s\n", token1);
            token1 = strtok_s(NULL, seps, &next_token1);
        }
        if (token2 != NULL)
        {
            printf("        %s\n", token2);
            token2 = strtok_s(NULL, seps, &next_token2);
        }
    }
}
Tokens:
A
        Another
string
        string
of
        parsed
tokens
        at
and
        the
some
        same
more
        time.
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