wcstok, wcstok_s
| Definido en el encabezado <wchar.h>
|
||
wchar_t* wcstok( wchar_t* str, const wchar_t* delim, wchar_t** ptr );
|
(1) | (desde C95) (hasta C99) |
wchar_t* wcstok( wchar_t* restrict str, const wchar_t* restrict delim,
wchar_t** restrict ptr );
|
(desde C99) | |
wchar_t* wcstok_s( wchar_t* restrict str, rsize_t* restrict strmax,
const wchar_t* restrict delim, wchar_t** restrict ptr);
|
(2) | (desde C11) |
str. Los caracteres separadores se identifican mediante la cadena ancha terminada en nulo apuntada por delim.- Si
str != NULL, la llamada se trata como la primera llamada awcstokpara esta cadena ancha en particular. La función busca el primer carácter ancho que no está contenido endelim.
- Si no se encuentra tal carácter ancho, no hay tokens en
stren absoluto, y la función devuelve un puntero nulo. - Si se encuentra tal carácter ancho, es el inicio del token. La función entonces busca desde ese punto en adelante el primer carácter ancho que sí está contenido en
delim.
- Si no se encuentra tal carácter ancho,
strtiene solo un token, y futuras llamadas awcstokdevolverán un puntero nulo. - Si se encuentra tal carácter ancho, se reemplaza por el carácter ancho nulo
L'\0'y el estado del analizador (típicamente un puntero al siguiente carácter ancho) se almacena en la ubicación proporcionada por el usuario*ptr.
- Si no se encuentra tal carácter ancho,
- La función entonces devuelve el puntero al inicio del token.
- Si no se encuentra tal carácter ancho, no hay tokens en
- Si
str == NULL, la llamada se trata como una llamada subsiguiente awcstok: la función continúa desde donde se quedó en la invocación anterior con el mismo*ptr. El comportamiento es el mismo que si el puntero al carácter ancho que sigue al último token detectado se pasara comostr.
- Si
str en *strmax. Las llamadas repetidas (con str nulo) deben pasar tanto strmax como ptr con los valores almacenados por la llamada anterior. Además, los siguientes errores se detectan en tiempo de ejecución y llaman a la función manejador de restricciones actualmente instalada, sin almacenar nada en el objeto apuntado por ptr
strmax,delim, optres un puntero nulo- en una llamada no inicial (con
strnulo),*ptres un puntero nulo - en la primera llamada,
*strmaxes cero o mayor queRSIZE_MAX / sizeof(wchar_t) - la búsqueda del final de un token alcanza el final de la cadena fuente (medido por el valor inicial de
*strmax) sin encontrar el terminador nulo
wcstok_s solo está garantizada para estar disponible si __STDC_LIB_EXT1__ está definido por la implementación y si el usuario define __STDC_WANT_LIB_EXT1__ como la constante entera 1 antes de incluir <wchar.h>.Parámetros
| str | - | puntero a la cadena ancha terminada en nulo para tokenizar |
| delim | - | puntero a la cadena ancha terminada en nulo que identifica los delimitadores |
| ptr | - | puntero a un objeto de tipo wchar_t*, que es utilizado tanto por wcstok como por wcstok_s para almacenar el estado interno del analizador
|
| strmax | - | puntero a un objeto que inicialmente contiene el tamaño de str: wcstok_s almacena el número de caracteres que quedan por examinar
|
Valor de retorno
Devuelve un puntero al inicio del siguiente token o un puntero nulo si no hay más tokens.
Nota
Esta función es destructiva: escribe los caracteres L'\0' en los elementos de la cadena str. En particular, un literal de cadena ancha no se puede usar como primer argumento de wcstok.
A diferencia de strtok, wcstok no actualiza el almacenamiento estático: almacena el estado del analizador en la ubicación proporcionada por el usuario.
A diferencia de la mayoría de otros tokenizadores, los delimitadores en wcstok pueden ser diferentes para cada token subsiguiente, e incluso pueden depender del contenido de los tokens anteriores.
La implementación de wcstok_s en la CRT de Windows es incompatible con el estándar C, es meramente un alias para wcstok.
Ejemplo
#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("'");
}
Salida:
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'
Referencias
- Estándar C11 (ISO/IEC 9899:2011):
- 7.29.4.5.7 La función wcstok (p: 437-438)
- K.3.9.2.3.1 La función wcstok_s (p: 645-646)
- Estándar C99 (ISO/IEC 9899:1999):
- 7.24.4.5.7 La función wcstok (p: 383-384)
Véase también
(C11) |
encuentra el siguiente token en una cadena de bytes (función) |
Documentación de C++ para wcstok
| |