wcstok, wcstok_s
| 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) |
str. Les caractères séparateurs sont identifiés par la chaîne large terminée par null pointée par delim.- Si
str != NULLn'est pas nul, 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 dansdelim.
- Si aucun caractère large de ce type n'est trouvé, il n'y a aucun jeton dans
strdu 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é,
strn'a qu'un seul jeton, et les appels futurs àwcstokrenverront 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é,
- La fonction renvoie alors le pointeur vers le début du jeton
- Si aucun caractère large de ce type n'est trouvé, il n'y a aucun jeton dans
- Si
str == NULLest 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é commestr.
- Si
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, ouptrest un pointeur nul- lors d'un appel non initial (avec
strnul),*ptrest un pointeur nul - lors du premier appel,
*strmaxest 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
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
(C11) |
trouve le jeton suivant dans une chaîne d'octets (fonction) |
Documentation C++ pour wcstok
| |