strtok
, , _strtok_l
, wcstok
, _wcstok_l
, , _mbstok
_mbstok_l
Znajduje następny token w ciągu przy użyciu bieżących ustawień regionalnych lub określonych ustawień regionalnych, które są przekazywane. Dostępne są bezpieczniejsze wersje tych funkcji; zobacz , , _strtok_s_l
, wcstok_s
, _wcstok_s_l
, _mbstok_s
, _mbstok_s_l
.strtok_s
Ważne
_mbstok
nie można jej _mbstok_l
używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows. Aby uzyskać więcej informacji, zobacz Funkcje CRT nieobsługiwane w aplikacjach platforma uniwersalna systemu Windows.
Składnia
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
Ciąg zawierający token lub tokeny.
strDelimit
Zestaw znaków ogranicznika.
locale
Ustawienia regionalne do użycia.
context
Wskazuje pamięć używaną do przechowywania stanu wewnętrznego analizatora, dzięki czemu analizator może kontynuować od miejsca, w którym została przerwana przy następnym wywołaniu metody wcstok
.
Wartość zwracana
Zwraca wskaźnik do następnego tokenu znalezionego w strToken
pliku . Funkcje są zwracane NULL
, gdy nie znaleziono więcej tokenów. Każde wywołanie modyfikuje strToken
przez podstawianie znaku null dla pierwszego ogranicznika, który występuje po zwróconym tokenie.
Uwagi
Funkcja strtok
znajduje następny token w pliku strToken
. Zestaw znaków w elemencie strDelimit
określa możliwe ograniczniki tokenu do znalezienia w strToken
bieżącym wywołaniu. wcstok
i _mbstok
są wersjami znaków wielobajtowych i wielobajtowych .strtok
Argumenty i wartość zwracana wcstok
wartości to ciągi wieloznakowe. Argumenty i wartość zwracana wartości to ciągi wielobajtowe _mbstok
znaków. Te trzy funkcje zachowują się identycznie inaczej.
Wersja dwóch argumentów wcstok
nie jest standardowa. Jeśli musisz użyć tej wersji, musisz zdefiniować _CRT_NON_CONFORMING_WCSTOK
ją przed ( #include <wchar.h>
lub #include <string.h>
).
Ważne
Te funkcje powodują potencjalne zagrożenie spowodowane przez problem z przepełnieniem buforu. Problemy z przepełnieniem buforu są częstą metodą ataku systemowego, co powoduje nieuzasadnione podniesienie uprawnień. Aby uzyskać więcej informacji, zobacz Unikanie przekroków buforu.
W pierwszym wywołaniu funkcji strtok
pomija wiodące ograniczniki i zwraca wskaźnik do pierwszego tokenu w strToken
elemecie , kończąc token z znakiem null. Więcej tokenów można podzielić na pozostałą strToken
część serii wywołań funkcji strtok
. Każde wywołanie metody strtok
modyfikuje strToken
przez wstawienie znaku null po wywołaniu zwróconym token
przez to wywołanie. Aby odczytać następny token z strToken
klasy , wywołaj metodę strtok
z wartością NULL
argumentu strToken
. Argument NULL
strToken
powoduje strtok
wyszukanie następnego tokenu w zmodyfikowanym strToken
obiekcie . Argument strDelimit
może przyjąć dowolną wartość z jednego wywołania do następnego, aby zestaw ograniczników mógł się różnić.
Na wartość wyjściową ma wpływ ustawienie LC_CTYPE
ustawienia kategorii ustawień regionalnych. Aby uzyskać więcej informacji, zobacz setlocale
.
Wersje tych funkcji bez sufiksu _l
używają bieżących ustawień regionalnych dla tego zachowania zależnego od ustawień regionalnych. Wersje z sufiksem _l
są identyczne, z tą różnicą, że używają parametru ustawień regionalnych przekazanych w zamian. Aby uzyskać więcej informacji, zobacz Ustawienia regionalne.
Uwaga
Każda funkcja używa zmiennej statycznej thread-local do analizowania ciągu do tokenów. W związku z tym wiele wątków może jednocześnie wywoływać te funkcje bez niepożądanych skutków. Jednak w jednym wątku przeplatanie wywołań do jednej z tych funkcji jest bardzo prawdopodobne, aby spowodować uszkodzenie danych i niedokładne wyniki. Podczas analizowania różnych ciągów zakończ analizowanie jednego ciągu przed rozpoczęciem analizowania następnego. Należy również pamiętać o potencjale zagrożenia podczas wywoływania jednej z tych funkcji z pętli, w której wywoływana jest inna funkcja. Jeśli druga funkcja kończy się przy użyciu jednej z tych funkcji, przeplatane sekwencja wywołań spowoduje wyzwolenie uszkodzenia danych.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Mapowania procedur tekstu ogólnego
TCHAR.H rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_tcstok |
strtok |
_mbstok |
wcstok |
_tcstok |
_strtok_l |
_mbstok_l |
_wcstok_l |
Wymagania
Procedura | Wymagany nagłówek |
---|---|
strtok |
<string.h> |
wcstok |
<string.h> lub <wchar.h> |
_wcstok_l |
<tchar.h> |
_mbstok , _mbstok_l |
<mbstring.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// 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
Zobacz też
Manipulowanie ciągami
ustawienia regionalne
Interpretacja sekwencji znaków wielobajtowych
strcspn
, , wcscspn
, , _mbscspn
_mbscspn_l
strspn
, , wcsspn
, , _mbsspn
_mbsspn_l