strtok
, _strtok_l
, wcstok
, _wcstok_l
, , _mbstok
, _mbstok_l
Busca el siguiente token en una cadena, con la configuración regional actual o con la configuración regional especificada que se pase. Hay disponibles versiones más seguras de estas funciones; consulte strtok_s
, _strtok_s_l
, wcstok_s
, _wcstok_s_l
, _mbstok_s
, _mbstok_s_l
.
Importante
_mbstok
y _mbstok_l
no se pueden usar en aplicaciones que se ejecutan en Windows en tiempo de ejecución. Para obtener más información, vea Funciones de CRT no admitidas en aplicaciones de la Plataforma universal de Windows.
Sintaxis
char *strtok(
char *strToken,
const char *strDelimit
);
char *_strtok_l(
char *strToken,
const char *strDelimit,
_locale_t locale
);
wchar_t *wcstok( /* Non-standard, define _CRT_NON_CONFORMING_WCSTOK to use */
wchar_t *strToken,
const wchar_t *strDelimit
);
wchar_t *wcstok(
wchar_t *strToken,
const wchar_t *strDelimit,
wchar_t **context
);
wchar_t *_wcstok_l(
wchar_t *strToken,
const wchar_t *strDelimit,
_locale_t locale
);
unsigned char *_mbstok(
unsigned char *strToken,
const unsigned char *strDelimit
);
unsigned char *_mbstok_l(
unsigned char *strToken,
const unsigned char *strDelimit,
_locale_t locale
);
Parámetros
strToken
Cadena que contiene tokens.
strDelimit
Juego de caracteres delimitadores.
locale
Configuración regional que se va a usar.
context
Apunta a la memoria usada para almacenar el estado interno del analizador para que este pueda continuar desde donde lo dejó la próxima vez que llame a wcstok
.
Valor devuelto
Devuelve un puntero al siguiente token que se encuentra en strToken
. Las funciones devuelven NULL
cuando no se encuentran más tokens. Cada llamada modifica strToken
sustituyendo un carácter nulo por el primer delimitador que aparece después del token devuelto.
Comentarios
La función strtok
busca el siguiente token en strToken
. El juego de caracteres de strDelimit
especifica los delimitadores posibles del token que se van a buscar en strToken
en la llamada actual. wcstok
y _mbstok
son versiones de caracteres anchos y multibyte de strtok
. Los argumentos y el valor devuelto de son cadenas de wcstok
caracteres anchos. Los argumentos y el valor devuelto de son cadenas de _mbstok
caracteres multibyte. Estas tres funciones se comportan exactamente igual.
La versión de dos argumentos de wcstok
no es estándar. Si necesita usar esa versión, deberá definir _CRT_NON_CONFORMING_WCSTOK
antes de #include <wchar.h>
(o #include <string.h>
).
Importante
Estas funciones representan una posible amenaza por un problema de saturación del búfer. Los problemas de saturación del búfer son un método frecuente de ataque del sistema, que produce una elevación de privilegios no justificada. Para obtener más información, consulte Evitar saturaciones del búfer.
En la primera llamada a strtok
, la función omite los delimitadores iniciales y devuelve un puntero al primer token de strToken
, y finaliza el token con un carácter nulo. Del resto de strToken
se pueden extraer más tokens mediante una serie de llamadas a strtok
. Cada llamada a strtok
modifica strToken
insertando un carácter nulo después del valor token
devuelto por esa llamada. Para leer el token siguiente de strToken
, llame a strtok
con un valor NULL
para el argumento de strToken
. El NULL
strToken
argumento hace que strtok
busque el siguiente token en el modificado strToken
. El argumento strDelimit
acepta cualquier valor de una llamada a la siguiente, por lo que el juego de delimitadores puede variar.
El valor de salida se ve afectado por el valor de la categoría LC_CTYPE
de la configuración regional. Para obtener más información, vea setlocale
.
Las versiones de estas funciones sin el sufijo _l
utilizan la configuración regional actual en el comportamiento que depende de esta configuración regional. Las versiones con el sufijo _l
son idénticas, salvo que usan el parámetro de configuración regional que se pasa. Para obtener más información, vea Locale.
Nota:
Cada función usa una variable estática local de subproceso para dividir la cadena en tokens. Por consiguiente, varios subprocesos pueden llamar simultáneamente a estas funciones sin que se produzcan efectos no deseados. Sin embargo, dentro de un único subproceso, la intercalación de llamadas a una de estas funciones generará probablemente daños en los datos y resultados poco precisos. Al analizar diferentes cadenas, termine de analizar una cadena antes de empezar a analizar la siguiente. Además, tenga en cuenta el riesgo que puede existir al llamar a una de estas funciones dentro de un bucle donde se llama a otra función. Si la otra función usa una de estas funciones, se producirá una secuencia intercalada de llamadas y se generarán daños en los datos.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Asignaciones de rutinas de texto genérico
Rutina TCHAR.H |
_UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tcstok |
strtok |
_mbstok |
wcstok |
_tcstok |
_strtok_l |
_mbstok_l |
_wcstok_l |
Requisitos
Routine | Encabezado necesario |
---|---|
strtok |
<string.h> |
wcstok |
<string.h> o <wchar.h> |
_wcstok_l |
<tchar.h> |
_mbstok , _mbstok_l |
<mbstring.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
// crt_strtok.c
// compile with: /W3
// In this program, a loop uses strtok
// to print all the tokens (separated by commas
// or blanks) in the string named "string".
//
#include <string.h>
#include <stdio.h>
char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;
int main( void )
{
printf( "Tokens:\n" );
// Establish string and get the first token:
token = strtok( string, seps ); // C4996
// Note: strtok is deprecated; consider using strtok_s instead
while( token != NULL )
{
// While there are tokens in "string"
printf( " %s\n", token );
// Get next token:
token = strtok( NULL, seps ); // C4996
}
}
Tokens:
A
string
of
tokens
and
some
more
tokens
Vea también
Manipulación de cadenas
Configuración regional
Interpretación de secuencias de caracteres de varios bytes
strcspn
, wcscspn
, , _mbscspn
, _mbscspn_l
strspn
, wcsspn
, , _mbsspn
, _mbsspn_l