Compartilhar via


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 especificada que é transmitida. Versões mais seguras dessas funções estão disponíveis; consulte 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 Tempo de Execução do Windows.Para obter mais informações, consulte Funções CRT sem suporte pelo /ZW.

char *strtok(
   char *strToken,
   const char *strDelimit 
);
wchar_t *wcstok(
   wchar_t *strToken,
   const wchar_t *strDelimit 
);
unsigned char *_mbstok(
   unsigned char*strToken,
   const unsigned char *strDelimit 
);
unsigned char *_mbstok(
   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 do delimitador.

  • locale
    Localidade a ser usada.

Valor de retorno

Retorna um ponteiro para o próximo token localizado em strToken. Retornam NULL quando não mais token é encontrado. Cada chamada para alterar strToken substituindo um caractere de NULL para o primeiro delimitador que ocorre após o token retornado.

Comentários

A função de strtok localiza o próximo token em strToken. O conjunto de caracteres em strDelimit especifica possíveis delimitadores de token a ser localizado em strToken na chamada atual. wcstok e _mbstok são versões de caracteres largos e de multibyte de strtok. Os argumentos e o valor de retorno de wcstok são cadeias de caracteres largos; _mbstok são cadeias de caracteres de vários bytes. Essas três funções se comportam de forma idêntica.

Observação de segurançaObservação de segurança

Essas funções incorrem uma ameaça potencialmente causado por um problema de excesso de buffer.Problemas de saturação de buffer é um método frequente de ataque do sistema, resultando em elevação injustificável de privilégio.Para obter mais informações, consulte Evitando saturações de buffer.

Na primeira chamada a strtok, a função ignora delimitadores principais e retorna um ponteiro para o primeiro token em strToken, encerrando o token com um caractere nulo. Mais tokens podem ser incluídos do restante de strToken por uma série de chamadas a strtok. Cada chamada para strtokaltera strToken inserindo um caractere nulo depois de token retornado por essa chamada. Para ler o próximo token de strToken, chame strtok com um valor de NULL para o argumento de strToken . O argumento de NULLstrToken faz com que strtok pesquise pelo próximo token em strTokenalterado. O argumento de strDelimit pode aceitar qualquer valor de uma chamada a seguir de modo que o conjunto de delimitadores pode variar.

O valor de saída é afetado pela configuração da categoria LC_CTYPE de 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 dependente da localidade; as versões com o sufixo _l são idênticas, exceto que elas usam o parâmetro de localidade informado. Para obter mais informações, consulte Localidade.

Dica

Cada função usa uma variável estática de thread local análise da cadeia de caracteres em tokens.Em virtude disso, vários threads simultaneamente podem chamar essas funções sem efeitos indesejados.No entanto, em um único thread, intercalar chamadas para uma dessas funções é bem provável que gerar a corrupção de dados e resultados inexatos.Quando cadeias de caracteres diferentes de análise, concluir que analisa uma cadeia de caracteres antes de começar a analisar o seguinte.Além disso, tenha em mente o potencial para o perigo ao chamar uma dessas funções de dentro de um loop em que outra função é chamada.Se outra função termina acima usando uma dessas funções, uma sequência de chamadas intercalada ocorrerá, disparar a corrupção de dados.

Mapeamentos da rotina de texto genérico

Rotina TCHAR.H

_UNICODE & _MBCS não definido

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

_mbstok, _mbstok_l

<mbstring.h>

Para informações adicionais de 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
   }
}
  

Equivalência do .NET Framework

Não aplicável. Para chamar a função padrão de C, use PInvoke. Para obter mais informações, consulte Exemplos de chamadas de plataformas.

Consulte também

Referência

Manipulação da cadeia de caracteres (CRT)

Localidade

Interpretação de sequências de caracteres multibyte

strcspn, wcscspn, _mbscspn, _mbscspn_l

strspn, wcsspn, _mbsspn, _mbsspn_l