strtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l

Znajduje następny token w ciągu przy użyciu bieżących ustawień regionalnych lub ustawień regionalnych, które są przekazywane. Te wersje programu strtok, _strtok_l, _wcstok_lwcstok, _mbstok_mbstok_l mają ulepszenia zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.

Ważne

_mbstok_snie można jej _mbstok_s_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_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
Ciąg zawierający token lub tokeny do znalezienia.

delimiters
Zestaw znaków ograniczników do użycia.

context
Służy do przechowywania informacji o położeniu między wywołaniami funkcji.

locale
Ustawienia regionalne do użycia.

Wartość zwracana

Zwraca wskaźnik do następnego tokenu znalezionego w strpliku . Zwraca wartość NULL , gdy nie znaleziono więcej tokenów. Każde wywołanie modyfikuje str przez podstawianie znaku null dla pierwszego ogranicznika, który występuje po zwróconym tokenie.

Warunki błędu

str delimiters context Wartość zwracana errno
NULL dowolny wskaźnik do wskaźnika o wartości null NULL EINVAL
dowolny NULL dowolny NULL EINVAL
dowolny dowolny NULL NULL EINVAL

Jeśli str jest NULL to context wskaźnik do prawidłowego wskaźnika kontekstu, nie ma błędu.

Uwagi

strtok_s Rodzina funkcji znajduje następny token w pliku str. Zestaw znaków w elemencie delimiters określa możliwe ograniczniki tokenu do znalezienia w str bieżącym wywołaniu. wcstok_si _mbstok_s są wersjami znaków wielobajtowych i wielobajtowych .strtok_s Argumenty i zwracane wartości wcstok_s i _wcstok_s_l są ciągami wieloznakowymi. Argumenty i zwracane wartości _mbstok_s i _mbstok_s_l są ciągami wielobajtowymi znaków. Te funkcje zachowują się identycznie inaczej.

Ta funkcja weryfikuje jego parametry. Jeśli wystąpi warunek błędu, tak jak w tabeli Warunki błędu, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, te funkcje są ustawione errno na EINVAL i zwracają wartość NULL.

W pierwszym wywołaniu funkcji strtok_spomija wiodące ograniczniki i zwraca wskaźnik do pierwszego tokenu w strelemecie , kończąc token z znakiem null. Więcej tokenów można podzielić na pozostałą str część serii wywołań funkcji strtok_s. Każde wywołanie do strtok_s modyfikacji str przez wstawienie znaku null po tokenie zwróconym przez to wywołanie. Wskaźnik context śledzi, który ciąg jest odczytywany i gdzie w ciągu ma zostać odczytany następny token. Aby odczytać następny token z strmetody , wywołaj strtok_s metodę z wartością NULL argumentu str i przekaż ten sam context parametr. Argument NULLstr powoduje strtok_s wyszukanie następnego tokenu w zmodyfikowanym strobiekcie . Argument delimiters może przyjąć dowolną wartość z jednego wywołania do następnego, aby zestaw ograniczników mógł się różnić.

context Ponieważ parametr zastępuje bufory statyczne używane w systemach strtok i _strtok_l, można przeanalizować dwa ciągi jednocześnie w tym samym wątku.

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 wątku dla tego zachowania zależnego od ustawień regionalnych. Wersje z sufiksem _l są identyczne, ale zamiast tego używają ustawień regionalnych określonych przez locale parametr . Aby uzyskać więcej informacji, zobacz Ustawienia regionalne.

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_s strtok_s _mbstok_s wcstok_s
_tcstok_s_l _strtok_s_l _mbstok_s_l _wcstok_s_l

Wymagania

Procedura Wymagany nagłówek
strtok_s <string.h>
_strtok_s_l <string.h>
wcstok_s,
_wcstok_s_l
<string.h> lub <wchar.h>
_mbstok_s,
_mbstok_s_l
<mbstring.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

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

Zobacz też

Manipulowanie ciągami
ustawienia regionalne
Interpretacja sekwencji znaków wielobajtowych
strcspn, wcscspn, _mbscspn, _mbscspn_l
strspn, wcsspn, _mbsspn, _mbsspn_l