wcstok, wcstok_s
|
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) |
-
-
Si
str
!
=
NULL
, l'appel est traité comme le premier appel à
wcstokpour 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 à
wcstokretourneront 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 .
-
Si aucun caractère large de ce type n'est trouvé,
str
ne contient qu'un seul jeton, et les appels futurs à
- 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 .
-
Si
str
!
=
NULL
, l'appel est traité comme le premier appel à
-
- 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_sn'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
|
(C11)
|
trouve le jeton suivant dans une chaîne d'octets
(fonction) |
|
Documentation C++
pour
wcstok
|
|