strtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l
Busca el siguiente token en una cadena, con la configuración regional actual o con la configuración regional que se pase. Estas versiones de strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l tienen mejoras de seguridad, como se describe en Características de seguridad de CRT.
Importante |
---|
_mbstok_s y _mbstok_s_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 con /ZW. |
char *strtok_s(
char *strToken,
const char *strDelimit,
char **context
);
char *_strtok_s_l(
char *strToken,
const char *strDelimit,
char **context,
_locale_tlocale
);
wchar_t *wcstok_s(
wchar_t *strToken,
const wchar_t *strDelimit,
wchar_t**context
);
wchar_t *_wcstok_s_l(
wchar_t *strToken,
const wchar_t *strDelimit,
wchar_t**context,
_locale_tlocale
);
unsigned char *_mbstok_s(
unsigned char*strToken,
const unsigned char *strDelimit,
char **context
);
unsigned char *_mbstok_s(
unsigned char*strToken,
const unsigned char *strDelimit,
char **context,
_locale_tlocale
);
Parámetros
strToken
Cadena que contiene tokens.strDelimit
Juego de caracteres delimitadores.context
Se usa para almacenar información de posición entre llamadas a strtok_slocale
Configuración regional que se va a usar.
Valor devuelto
Devuelve un puntero al siguiente token que se encuentra en strToken. Devuelven NULL cuando no se encuentran más tokens. Cada llamada modifica strToken sustituyendo un carácter NULL por el primer delimitador que aparece después del token devuelto.
Condiciones de error
strToken |
strDelimit |
context |
Valor devuelto |
errno |
---|---|---|---|---|
NULL |
any |
puntero a un puntero nulo |
NULL |
EINVAL |
any |
NULL |
any |
NULL |
EINVAL |
any |
any |
NULL |
NULL |
EINVAL |
Si strToken es NULL pero el contexto es un puntero a un puntero de contexto válido, no se produce error.
Comentarios
La función strtok_s 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_s y _mbstok_sson versiones de caracteres anchos y multibyte de strtok_s. Los argumentos y valores devueltos de wcstok_s y _wcstok_s_l son cadenas de caracteres anchos; los de _mbstok_s y _mbstok_s_l son cadenas de caracteres multibyte. Estas tres funciones se comportan exactamente igual.
Esta función valida sus parámetros. Si se produce una condición de error, como se describe en la tabla de condiciones de error, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, estas funciones establecen errno en EINVAL y devuelven NULL.
Asignaciones de rutina de texto genérico
Rutina TCHAR.H |
_UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_tcstok_s |
strtok_s |
_mbstok_s |
wcstok_s |
_tcstok_s_l |
_strtok_s_l |
_mbstok_s_l |
_wcstok_s_l |
En la primera llamada a strtok_s, 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_s. Cada llamada a strtok_s modifica strToken insertando un carácter nulo después del token devuelto por la llamada. El puntero a context realiza el seguimiento de la cadena que se está leyendo y dónde en la cadena se debe leer el token siguiente. Para leer el token siguiente de strToken, llame a strtok_s con un valor NULL para el argumento de strToken, y pase el mismo parámetro context. El argumento NULL de strToken hace que strtok_s busque el token siguiente en el parámetro strToken modificado. El argumento strDelimit acepta cualquier valor de una llamada a la siguiente, por lo que el juego de delimitadores puede variar.
Puesto que el parámetro context reemplaza los búferes estáticos que se usan en strtok y _strtok_l, es posible analizar dos cadenas simultáneamente en el mismo subproceso.
El valor de salida se ve afectado por el valor de la categoría LC_CTYPE de la configuración regional; vea setlocale para obtener más información. Las versiones de estas funciones sin el sufijo _l usan la configuración regional actual de su comportamiento dependiente de la configuración regional; las versiones con el sufijo _l son idénticas salvo que usan el parámetro locale pasado en su lugar. Para obtener más información, vea Configuración regional.
Requisitos
Rutina |
Encabezado necesario |
---|---|
strtok_s |
<string.h> |
_strtok_s_l |
<string.h> |
wcstok_s, _wcstok_s_l |
<string.h> o <wchar.h> |
_mbstok_s, _mbstok_s_l |
<mbstring.h> |
Para obtener más información sobre compatibilidad, vea Compatibilidad.
Ejemplo
// crt_strtok_s.c
// In this program, a loop uses strtok_s
// to print all the tokens (separated by commas
// or blanks) in two strings at the same time.
//
#include <string.h>
#include <stdio.h>
char string1[] =
"A string\tof ,,tokens\nand some more tokens";
char string2[] =
"Another string\n\tparsed at the same time.";
char seps[] = " ,\t\n";
char *token1 = NULL;
char *token2 = NULL;
char *next_token1 = NULL;
char *next_token2 = NULL;
int main( void )
{
printf( "Tokens:\n" );
// Establish string and get the first token:
token1 = strtok_s( string1, seps, &next_token1);
token2 = strtok_s ( string2, seps, &next_token2);
// While there are tokens in "string1" or "string2"
while ((token1 != NULL) || (token2 != NULL))
{
// Get next token:
if (token1 != NULL)
{
printf( " %s\n", token1 );
token1 = strtok_s( NULL, seps, &next_token1);
}
if (token2 != NULL)
{
printf(" %s\n", token2 );
token2 = strtok_s (NULL, seps, &next_token2);
}
}
}
Equivalente en .NET Framework
No es aplicable Para llamar a la función estándar de C, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.
Vea también
Referencia
Interpretación de secuencias de caracteres de varios bytes