Namespaces
Variants

wcstok, wcstok_s

Depuis fr.cppreference.net
 
 
 
 
Défini dans l'en-tête <wchar.h>
wchar_t* wcstok( wchar_t* str, const wchar_t* delim, wchar_t** ptr );
(1) (depuis C95)
(jusqu'à C99)
wchar_t* wcstok( wchar_t*  restrict str, const wchar_t* restrict delim,
                 wchar_t** restrict ptr );
(depuis C99)
wchar_t* wcstok_s( wchar_t* restrict str, rsize_t* restrict strmax,
                   const wchar_t* restrict delim, wchar_t** restrict ptr);
(2) (depuis C11)
1) Trouve le jeton suivant dans une chaîne large terminée par null pointée par str. Les caractères séparateurs sont identifiés par la chaîne large terminée par null pointée par delim.
Cette fonction est conçue pour être appelée plusieurs fois afin d'obtenir des jetons successifs de la même chaîne.
  • Si str != NULL n'est pas nul, l'appel est traité comme le premier appel à wcstok pour cette chaîne large particulière. La fonction recherche le premier caractère large qui n'est pas contenu dans delim.
  • Si aucun caractère large de ce type n'est trouvé, il n'y a aucun jeton dans str du tout, et la fonction renvoie un pointeur nul.
  • Si un tel caractère large est trouvé, c'est le début du jeton. La fonction recherche ensuite à partir de ce point le premier caractère large qui est contenu dans delim.
  • Si aucun caractère large de ce type n'est trouvé, str n'a qu'un seul jeton, et les appels futurs à wcstok renverront un pointeur nul
  • Si un tel caractère large est trouvé, il est remplacé par le caractère large nul L'\0' et l'état de l'analyseur (généralement un pointeur vers le caractère large suivant) est stocké dans l'emplacement fourni par l'utilisateur *ptr.
  • La fonction renvoie alors le pointeur vers le début du jeton
  • Si str == NULL est nul, l'appel est traité comme un appel ultérieur à wcstok : la fonction continue là où elle s'est arrêtée lors de l'invocation précédente avec le même *ptr. Le comportement est le même que si le pointeur vers le caractère large qui suit le dernier jeton détecté est passé comme str.
2) Identique à (1), sauf qu'à chaque étape, écrit le nombre de caractères restant à voir dans str dans *strmax. Les appels répétés (avec str nul) doivent passer à la fois strmax et ptr avec les valeurs stockées par l'appel précédent. De plus, les erreurs suivantes sont détectées au moment de l'exécution et appellent la fonction de gestion des contraintes actuellement installée, sans rien stocker dans l'objet pointé par ptr
  • strmax, delim, ou ptr est un pointeur nul
  • lors d'un appel non initial (avec str nul), *ptr est un pointeur nul
  • lors du premier appel, *strmax est zéro ou supérieur à RSIZE_MAX / sizeof(wchar_t)
  • la recherche de la fin d'un jeton atteint la fin de la chaîne source (mesurée par la valeur initiale de *strmax) sans rencontrer le terminateur nul
Comme toutes les fonctions avec vérification des limites, wcstok_s n'est garantie d'être disponible que si __STDC_LIB_EXT1__ est définie par l'implémentation et si l'utilisateur définit __STDC_WANT_LIB_EXT1__ comme la constante entière 1 avant d'inclure <wchar.h>.

Paramètres

str - pointeur vers la chaîne large terminée par null à tokeniser
delim - pointeur vers la chaîne large terminée par null identifiant les délimiteurs
ptr - pointeur vers un objet de type wchar_t*, utilisé à la fois par wcstok et wcstok_s pour stocker l'état interne de l'analyseur
strmax - pointeur vers un objet qui contient initialement la taille de str : wcstok_s stocke le nombre de caractères restant à examiner

Valeur de retour

Renvoie un pointeur vers le début du jeton suivant ou un pointeur nul s'il n'y a plus de jetons.

Note

Cette fonction est destructive : elle écrit les caractères L'\0' dans les éléments de la chaîne str. En particulier, un littéral de chaîne large ne peut pas être utilisé comme premier argument de wcstok.

Contrairement à strtok, wcstok ne met pas à jour le stockage statique : il stocke l'état de l'analyseur dans l'emplacement fourni par l'utilisateur.

Contrairement à la plupart des autres tokeniseurs, les délimiteurs dans wcstok peuvent être différents pour chaque jeton suivant, et peuvent même dépendre du contenu des jetons précédents.

L'implémentation de wcstok_s dans le CRT de Windows est incompatible avec la norme C, ce n'est qu'un alias pour wcstok.

Exemple

#include <stdio.h>
#include <wchar.h>

int main(void)
{
    wchar_t input[] = L"A bird came down the walk";
    printf("Parsing the input string '%ls'\n", input);
    wchar_t* buffer;
    wchar_t* token = wcstok(input, L" ", &buffer);
    while (token)
    {
        printf("%ls\n", token);
        token = wcstok(NULL, L" ", &buffer);
    }

    printf("Contents of the input string now: '");
    for (size_t n = 0; n < sizeof input / sizeof *input; ++n)
        input[n] ? printf("%lc", input[n]) : printf("\\0");
    puts("'");
}

Sortie :

Parsing the input string 'A bird came down the walk'
A
bird
came
down
the
walk
Contents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'

Références

  • Norme C11 (ISO/IEC 9899:2011):
  • 7.29.4.5.7 La fonction wcstok (p : 437-438)
  • K.3.9.2.3.1 La fonction wcstok_s (p : 645-646)
  • Norme C99 (ISO/IEC 9899:1999):
  • 7.24.4.5.7 La fonction wcstok (p : 383-384)

Voir aussi

trouve le jeton suivant dans une chaîne d'octets
(fonction)
Documentation C++ pour wcstok