Sdílet prostřednictvím


strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l

Vyhledá další token v řetězci pomocí aktuálního národního prostředí nebo zadaného národního prostředí, které je předáno. K dispozici jsou bezpečnější verze těchto funkcí; viz , , wcstok_s_strtok_s_l, _wcstok_s_l, _mbstok_s, _mbstok_s_l.strtok_s

Důležité

_mbstoka _mbstok_l nelze je použít v aplikacích, které se spouští v prostředí Windows Runtime. Další informace najdete v tématu Funkce CRT, které nejsou v aplikacích Univerzální platforma Windows podporované.

Syntaxe

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
);

Parametry

strToken
Řetězec obsahující token nebo tokeny.

strDelimit
Sada oddělovacích znaků.

locale
Národní prostředí, které se má použít.

context
Odkazuje na paměť použitou k uložení interního stavu analyzátoru, aby analyzátor mohl pokračovat tam, kde skončil při příštím volání wcstok.

Vrácená hodnota

Vrátí ukazatel na další token nalezený v strToken. Funkce se vrátí NULL , když nenajdete žádné další tokeny. Každé volání upraví strToken nahrazením znaku null pro první oddělovač, který nastane po vrácený token.

Poznámky

Funkce strtok najde další token v strToken. Sada znaků určuje strDelimit možné oddělovače tokenu, které se mají najít v strToken aktuálním volání. wcstoka _mbstok jsou širokoznakové a vícebajtové verze .strtok Argumenty a návratová hodnota jsou řetězce širokého znaku wcstok . Argumenty a návratová _mbstok hodnota jsou řetězce s vícebajtovými znaky. Tyto tři funkce se chovají stejně jinak.

Verze dvou argumentů wcstok není standardní. Pokud tuto verzi potřebujete použít, musíte ji před (nebo#include <string.h>) definovat_CRT_NON_CONFORMING_WCSTOK.#include <wchar.h>

Důležité

K těmto funkcím dochází k potenciální hrozbě způsobené problémem přetečení vyrovnávací paměti. Problémy s přetečením vyrovnávací paměti jsou častou metodou útoku na systém, což vede k neoprávněnému zvýšení oprávnění. Další informace najdete v tématu Zabránění přetečení vyrovnávací paměti.

Při prvním volání strtokfunkce přeskočí počáteční oddělovače a vrátí ukazatel na první token v strToken, ukončuje token znakem null. Více tokenů lze rozdělit ze zbytku strToken řady volání strtok. Každé volání, které strtok má být upraveno strToken vložením znaku null za token vráceným voláním. Pokud chcete přečíst další token z strToken, volání strtok s NULL hodnotou argumentu strToken . Argument NULLstrToken způsobí strtok vyhledání dalšího tokenu v změněné strToken. Argument strDelimit může převzít libovolnou hodnotu z jednoho volání na další, aby se sada oddělovačů mohla lišit.

Výstupní hodnota je ovlivněna nastavením LC_CTYPE nastavení kategorie národního prostředí. Další informace najdete na webu setlocale.

Verze těchto funkcí bez _l přípony používají aktuální národní prostředí pro toto chování závislé na národním prostředí. Verze s příponou _l jsou shodné s tím rozdílem, že místo toho používají parametr národního prostředí předaný. Další informace naleznete v tématu Národní prostředí.

Poznámka

Každá funkce používá pro parsování řetězce do tokenů statickou proměnnou místního vlákna. Proto může více vláken současně volat tyto funkce bez nežádoucích účinků. Nicméně v rámci jednoho vlákna je prokládání volání jedné z těchto funkcí vysoce pravděpodobné, že způsobí poškození dat a nepřesné výsledky. Při analýze různých řetězců dokončete analýzu jednoho řetězce před zahájením analýzy dalšího řetězce. Při volání jedné z těchto funkcí ve smyčce, kde se volá jiná funkce, také mějte na paměti potenciál nebezpečí. Pokud druhá funkce použije některou z těchto funkcí, dojde k prokládání posloupnosti volání, která aktivuje poškození dat.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Mapování rutin obecného textu

TCHAR.H Rutinní _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_tcstok strtok _mbstok wcstok
_tcstok _strtok_l _mbstok_l _wcstok_l

Požadavky

Rutina Požadovaný hlavičkový soubor
strtok <string.h>
wcstok <string.h> nebo <wchar.h>
_wcstok_l <tchar.h>
_mbstok, _mbstok_l <mbstring.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

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

Viz také

Manipulace s řetězci
Národní prostředí
Interpretace vícebajtových sekvencí znaků
strcspn, wcscspn, _mbscspn, _mbscspn_l
strspn, wcsspn, _mbsspn, _mbsspn_l