strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l

Localiza o próximo token em uma cadeia de caracteres usando a localidade atual ou uma localidade específica que é informada. Estão disponíveis versões mais seguras dessas funções. Para obter informações, confira strtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l.

Importante

_mbstok e _mbstok_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(
   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
Cadeia de caracteres que contém o token ou os tokens.

strDelimit
Conjunto de caracteres delimitadores.

locale
Localidade a usar.

context
Aponta para a memória usada para armazenar o estado interno do analisador para que o analisador possa continuar de onde parou na próxima vez que você chamar wcstok.

Retornar valor

Retorna um ponteiro para o próximo token encontrado em strToken. As funções retornam NULL quando já nenhum token é encontrado. Cada chamada modifica strToken substituindo um caractere nulo pelo primeiro delimitador que ocorre após o token retornado.

Comentários

A função strtok localiza o próximo token em strToken. O conjunto de caracteres em strDelimit especifica possíveis delimitadores de token a serem encontrados em strToken na chamada atual. wcstok e _mbstok são versões de caracteres largos e de caracteres multibyte de strtok. Os argumentos e o valor de retorno de são cadeias de wcstok caracteres largos. Os argumets e o valor de retorno de são cadeias de _mbstok caracteres multibyte. Caso contrário, essas três funções se comportam de forma idêntica.

A versão de dois argumentos não wcstok é padrão. Se você precisar usar essa versão, precisará definir _CRT_NON_CONFORMING_WCSTOK antes de #include <wchar.h> (ou #include <string.h>).

Importante

Essas funções acarretam uma ameaça em potencial em relação ao problema de estouro de buffer. Os problemas de estouro de buffer são um método frequente de ataque ao sistema, resultando em uma elevação de privilégio sem garantia. Para obter mais informações, consulte Evitando saturações de buffer.

Na primeira chamada para strtok, a função ignora delimitadores à esquerda e retorna um ponteiro para o primeiro token no strToken, encerrando o token com um caractere nulo. Mais tokens podem ser divididos, fora o restante do strToken por uma série de chamadas para strtok. Cada chamada a strtok modifica strToken inserindo um caractere nulo após o token retornado por essa chamada. Para ler o próximo token de strToken, chame strtok com um valor NULL para o argumento strToken. O argumento NULLstrToken faz com que o strtok pesquise o próximo token no strToken modificado. O argumento strDelimit pode assumir qualquer valor de uma chamada para o próximo, para que o conjunto de delimitadores possa variar.

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 para esse comportamento que depende da localidade. As versões com o sufixo _l são idênticas, com exceção de que, em vez disso, usam o parâmetro de localidade fornecido. Para obter mais informações, consulte Localidade.

Observação

Cada função usa uma variável estática de thread local para classificar a cadeia de caracteres em tokens. Portanto, vários threads simultaneamente podem chamar essas funções sem efeitos indesejáveis. No entanto, em um único thread, chamadas intercaladas para uma dessas funções é tende muito a causar dados corrompidos e resultados imprecisos. Ao classificar cadeias de caracteres diferentes, termine de classificar uma cadeia de caracteres antes de começar a analisar a próxima. Além disso, fique ciente do potencial de risco ao chamar uma dessas funções de dentro de um loop em que outra função seja chamada. Se a outra função acaba usando uma dessas funções, uma sequência intercalada de chamadas resultará, disparando os dados corrompidos.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, consulte Estado global na CRT.

Mapeamentos de rotina de texto genérico

Rotina TCHAR.H _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_tcstok strtok _mbstok wcstok
_tcstok _strtok_l _mbstok_l _wcstok_l

Requisitos

Rotina Cabeçalho necessário
strtok <string.h>
wcstok <string.h> ou <wchar.h>
_wcstok_l <tchar.h>
_mbstok, _mbstok_l <mbstring.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// 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

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