Namespaces
Variants

wcstok, wcstok_s

De es.cppreference.net
< c | cadena | ancho
 
 
 
 
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)
1) Encuentra el siguiente token en una cadena ancha terminada en nulo apuntada por str. Los caracteres separadores se identifican mediante la cadena ancha terminada en nulo apuntada por delim.
Esta función está diseñada para ser llamada múltiples veces para obtener tokens sucesivos de la misma cadena.
  • Si str != NULL, la llamada se trata como la primera llamada a wcstok para esta cadena ancha en particular. La función busca el primer carácter ancho que no está contenido en delim.
  • Si no se encuentra tal carácter ancho, no hay tokens en str en 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, str tiene solo un token, y futuras llamadas a wcstok devolverá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.
  • La función entonces devuelve el puntero al inicio del token.
  • Si str == NULL, la llamada se trata como una llamada subsiguiente a wcstok: 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 como str.
2) Igual que (1), excepto que en cada paso, escribe el número de caracteres restantes por ver en 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, o ptr es un puntero nulo
  • en una llamada no inicial (con str nulo), *ptr es un puntero nulo
  • en la primera llamada, *strmax es cero o mayor que RSIZE_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
Como todas las funciones con verificación de límites, 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

encuentra el siguiente token en una cadena de bytes
(función)