Namespaces
Variants

wcstok, wcstok_s

From cppreference.net
< c ‎ | string ‎ | wide
Défini dans l'en-tête <wchar.h>
(1)
wchar_t * wcstok ( wchar_t * str, const wchar_t * delim, wchar_t ** ptr ) ;
(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 prochain jeton dans une chaîne large terminée par un nul pointée par str . Les caractères séparateurs sont identifiés par la chaîne large terminée par un nul pointée par delim .
Cette fonction est conçue pour être appelée plusieurs fois afin d'obtenir des jetons successifs à partir de la même chaîne.
  • Si str ! = NULL , 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 , et la fonction retourne un pointeur nul.
  • Si un tel caractère large est trouvé, il constitue 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 ne contient qu'un seul jeton, et les appels futurs à wcstok retourneront 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 retourne ensuite le pointeur vers le début du jeton.
  • Si str == NULL , l'appel est traité comme un appel subséquent à wcstok : la fonction continue là où elle s'était 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 à l'exécution et appellent la fonction gestionnaire de 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 (telle que mesurée par la valeur initiale de * strmax ) sans rencontrer le terminateur nul
Comme toutes les fonctions à vérification de limites, wcstok_s n'est garantie d'être disponible que si __STDC_LIB_EXT1__ est défini par l'implémentation et si l'utilisateur définit __STDC_WANT_LIB_EXT1__ à la constante entière 1 avant d'inclure <wchar.h> .

Table des matières

Paramètres

str - pointeur vers la chaîne large terminée par un caractère nul à tokeniser
delim - pointeur vers la chaîne large terminée par un caractère nul 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

Retourne 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 L ' \0 ' caractères 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 à l'emplacement fourni par l'utilisateur.

Contrairement à la plupart des autres tokenizers, les délimiteurs dans wcstok peuvent être différents pour chaque token subséquent, et peuvent même dépendre du contenu des tokens précédents.

L'implémentation de wcstok_s dans le Windows CRT n'est pas conforme à la norme C, il s'agit simplement d'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/CEI 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)