strtok_s
, _strtok_s_l
, wcstok_s
, _wcstok_s_l
, _mbstok_s
, , _mbstok_s_l
Localiza o próximo token em uma cadeia de caracteres, usando a localidade atual ou uma localidade específica que é informada. Essas versões do , _strtok_l
, , _wcstok_l
wcstok
, _mbstok
, _mbstok_l
têm aprimoramentos de strtok
segurança, conforme descrito em Recursos de segurança no CRT.
Importante
_mbstok_s
e _mbstok_s_l
não podem ser usados em aplicativos executados no Windows Runtime. Para obter mais informações, confira Funções do CRT sem suporte em aplicativos da Plataforma Universal do Windows.
Sintaxe
char* strtok_s(
char* str,
const char* delimiters,
char** context
);
char* _strtok_s_l(
char* str,
const char* delimiters,
char** context,
_locale_t locale
);
wchar_t* wcstok_s(
wchar_t* str,
const wchar_t* delimiters,
wchar_t** context
);
wchar_t *_wcstok_s_l(
wchar_t* str,
const wchar_t* delimiters,
wchar_t** context,
_locale_t locale
);
unsigned char* _mbstok_s(
unsigned char* str,
const unsigned char* delimiters,
char** context
);
unsigned char* _mbstok_s_l(
unsigned char* str,
const unsigned char* delimiters,
char** context,
_locale_t locale
);
Parâmetros
str
Uma cadeia de caracteres que contém o token ou tokens a serem encontrados.
delimiters
O conjunto de caracteres delimitadores a serem usados.
context
Usado para armazenar informações de posição entre as chamadas para a função.
locale
A localidade a ser usada.
Valor retornado
Retorna um ponteiro para o próximo token encontrado em str
. Retorna NULL
quando não forem encontrados mais tokens. Cada chamada modifica str
substituindo um caractere nulo pelo primeiro delimitador que ocorre após o token retornado.
Condições de erro
str |
delimiters |
context |
Valor retornado | errno |
---|---|---|---|---|
NULL |
any | ponteiro para um ponteiro nulo | NULL |
EINVAL |
any | NULL |
qualquer | NULL |
EINVAL |
qualquer | any | NULL |
NULL |
EINVAL |
Se str
é NULL
, mas context
é um ponteiro para um ponteiro de contexto válido, não há nenhum erro.
Comentários
A família de funções strtok_s
localiza o próximo token em str
. O conjunto de caracteres em delimiters
especifica possíveis delimitadores de token a serem encontrados em str
na chamada atual. wcstok_s
e _mbstok_s
são versões de caracteres largos e de caracteres multibyte de strtok_s
. Os argumentos e os valores retornados de wcstok_s
e _wcstok_s_l
são cadeias de caracteres largos. Os argumentos e os valores retornados de e _mbstok_s_l
são cadeias de _mbstok_s
caracteres multibyte. Caso contrário, essas funções se comportam de forma idêntica.
Essa função valida seus parâmetros. Quando ocorre uma condição de erro, como na tabela Condições de Erro, o manipulador de parâmetro inválido é invocado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, essas funções definirão errno
como EINVAL
e retornarão NULL
.
Na primeira chamada para strtok_s
, a função ignora delimitadores à esquerda e retorna um ponteiro para o primeiro token no str
, encerrando o token com um caractere nulo. Mais tokens podem ser divididos, fora o restante do str
por uma série de chamadas para strtok_s
. Cada chamada para strtok_s
modifica str
inserindo um caractere nulo após o token retornado pela chamada. O context
ponteiro mantém controle de cadeia de caracteres que está sendo lido e no qual o próximo token na cadeia de caracteres deve ser lido. Para ler o próximo token de str
, chame strtok_s
com um valor NULL
para o str
argumento e passe o mesmo parâmetro context
. O NULL
str
argumento faz com que strtok_s
seja necessário procurar o próximo token no arquivo .str
O argumento delimiters
pode assumir qualquer valor de uma chamada para o próximo, para que o conjunto de delimitadores possa variar.
Como o parâmetro context
substitui os buffers estáticos usados em strtok
e _strtok_l
, é possível analisar as duas cadeias de caracteres simultaneamente no mesmo thread.
O valor de saída é afetado pela configuração da categoria LC_CTYPE
da localidade. Para obter mais informações, consulte setlocale
.
As versões dessas funções sem o sufixo _l
usam a localidade atual do thread para esse comportamento que depende da localidade. As versões com o sufixo _l
são idênticas, exceto que usam a localidade especificada pelo parâmetro locale
. Para obter mais informações, consulte Localidade.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.
Mapeamentos de rotina de texto genérico
Rotina TCHAR.H |
_UNICODE e _MBCS não 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 |
Requisitos
Rotina | Cabeçalho necessário |
---|---|
strtok_s |
<string.h> |
_strtok_s_l |
<string.h> |
wcstok_s ,_wcstok_s_l |
<string.h> ou <wchar.h> |
_mbstok_s ,_mbstok_s_l |
<mbstring.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
// 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);
}
}
}
Tokens:
A
Another
string
string
of
parsed
tokens
at
and
the
some
same
more
time.
tokens
Confira também
Manipulação de cadeia de caracteres
Localidade
Interpretação de sequências de caracteres multibyte
strcspn
, wcscspn
, _mbscspn
, _mbscspn_l
strspn
, wcsspn
, _mbsspn
, _mbsspn_l