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é
_mbstok
a _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í. wcstok
a _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í strtok
funkce 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 NULL
strToken
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 rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_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