strtok_s
, _strtok_s_l
, wcstok_s
, _wcstok_s_l
, , _mbstok_s
_mbstok_s_l
Vyhledá další token v řetězci pomocí aktuálního národního prostředí nebo pomocí předaného národního prostředí. Tyto verze , , _strtok_l
wcstok
, _wcstok_l
, _mbstok
mají _mbstok_l
vylepšení zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.strtok
Důležité
_mbstok_s
a _mbstok_s_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_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
);
Parametry
str
Řetězec obsahující token nebo tokeny, které chcete najít.
delimiters
Sada znaků oddělovače, které se mají použít.
context
Slouží k ukládání informací o poloze mezi voláními funkce.
locale
Národní prostředí, které se má použít
Vrácená hodnota
Vrátí ukazatel na další token nalezený v str
. Vrátí, NULL
když se nenašly žádné další tokeny. Každé volání upraví str
nahrazením znaku null pro první oddělovač, který nastane po vrácený token.
Chybové podmínky
str |
delimiters |
context |
Vrácená hodnota | errno |
---|---|---|---|---|
NULL |
jakékoliv | ukazatel na ukazatel s hodnotou null | NULL |
EINVAL |
jakékoliv | NULL |
jakékoliv | NULL |
EINVAL |
jakékoliv | jakékoliv | NULL |
NULL |
EINVAL |
Pokud str
je NULL
ukazatel context
na platný kontextový ukazatel, neexistuje žádná chyba.
Poznámky
Řada strtok_s
funkcí najde další token v str
souboru . Sada znaků určuje delimiters
možné oddělovače tokenu, které se mají najít v str
aktuálním volání. wcstok_s
a _mbstok_s
jsou širokoznakové a vícebajtové verze .strtok_s
Argumenty a návratové wcstok_s
_wcstok_s_l
hodnoty a jsou řetězce širokého znaku. Argumenty a návratové _mbstok_s
_mbstok_s_l
hodnoty a jsou řetězce s vícebajtovými znaky. Tyto funkce se chovají stejně jinak.
Tato funkce ověří své parametry. Pokud dojde k chybovému stavu, jako v tabulce Chybové podmínky, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud provádění může pokračovat, tyto funkce jsou nastaveny errno
na EINVAL
a vracet NULL
.
Při prvním volání strtok_s
funkce přeskočí počáteční oddělovače a vrátí ukazatel na první token v str
, ukončuje token znakem null. Více tokenů lze rozdělit ze zbytku str
řady volání strtok_s
. Každé volání strtok_s
modifikuje str
vložením znaku null za token vrácený tímto voláním. Ukazatel context
sleduje, který řetězec se čte a kde v řetězci se má další token číst. Pokud chcete přečíst další token z str
, volání strtok_s
s NULL
hodnotou argumentu str
a předání stejného context
parametru. Argument NULL
str
způsobí strtok_s
vyhledání dalšího tokenu v změněné str
. Argument delimiters
může převzít libovolnou hodnotu z jednoho volání na další, aby se sada oddělovačů mohla lišit.
Vzhledem k tomu, že context
parametr nahrazuje statické vyrovnávací paměti použité ve strtok
stejném vlákně, _strtok_l
je možné parsovat dva řetězce současně ve stejném vlákně.
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 přípony _l
používají pro toto chování závislé na národním prostředí aktuální národní prostředí. Verze s příponou _l
jsou shodné s tím rozdílem, že místo toho používají národní prostředí určené parametrem locale
. Další informace naleznete v tématu Národní prostředí.
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_s |
strtok_s |
_mbstok_s |
wcstok_s |
_tcstok_s_l |
_strtok_s_l |
_mbstok_s_l |
_wcstok_s_l |
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
strtok_s |
<string.h> |
_strtok_s_l |
<string.h> |
wcstok_s ,_wcstok_s_l |
<string.h> nebo <wchar.h> |
_mbstok_s ,_mbstok_s_l |
<mbstring.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// 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
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