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

_mbstoknie 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 strTokenpliku . 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. wcstoki _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 strtokpomija wiodące ograniczniki i zwraca wskaźnik do pierwszego tokenu w strTokenelemecie , 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 strTokenklasy , wywołaj metodę strtok z wartością NULL argumentu strToken . Argument NULLstrToken powoduje strtok wyszukanie następnego tokenu w zmodyfikowanym strTokenobiekcie . 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. W celu uzyskania więcej informacji, zobacz następujący temat: 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 Rutynowych _UNICODE i _MBCS niezdefiniowane _MBCS Zdefiniowane _UNICODE Zdefiniowane
_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