Поделиться через


strtok_s, , _strtok_s_l_wcstok_s_lwcstok_s_mbstok_s,_mbstok_s_l

Находит следующий токен в строке с использованием текущего или переданного языкового стандарта. Эти версии , , _strtok_l, _mbstok_lwcstok_wcstok_l_mbstok имеют улучшения безопасности, как описано в функциях strtokбезопасности в CRT.

Внимание

Функции _mbstok_s и _mbstok_s_l не могут использоваться в приложениях, запускаемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.

Синтаксис

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
);

Параметры

str
Строка, содержащая маркер или маркеры для поиска.

delimiters
Набор символов разделителя, используемых.

context
Используется для хранения сведений о позиции между вызовами функции.

locale
Используемый языковой стандарт.

Возвращаемое значение

Возвращает указатель на следующий токен, найденный в str. Возвращает, NULL когда больше маркеров не найдено. Каждый вызов изменяет str путем замены символа NULL для первого разделителя, который возникает после возвращаемого маркера.

Условия ошибок

str delimiters context Возвращаемое значение errno
NULL любое указатель на указатель NULL NULL EINVAL
любое NULL любое NULL EINVAL
любое любое NULL NULL EINVAL

Если str это NULL указатель context на допустимый указатель контекста, ошибка отсутствует.

Замечания

Семейство strtok_s функций находит следующий маркер в str. Набор символов в параметре delimiters указывает возможные разделители токенов, которые требуется найти в str во время текущего вызова. Функции wcstok_s и _mbstok_s являются версиями функции strtok_s для расширенных и многобайтовых символов. Аргументы и возвращаемые значения wcstok_s _wcstok_s_l и являются строками с широкими символами. Аргументы и возвращаемые значения _mbstok_s _mbstok_s_l и являются многобайтовыми строками. В остальном эти функции ведут себя одинаково.

Эта функция проверяет свои параметры. При возникновении условия ошибки, как в таблице "Условия ошибки", вызывается обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, эти функции устанавливают параметр errno в значение EINVAL и возвращают значение NULL.

При первом вызове функции strtok_s она пропускает ведущие разделители и возвращает указатель на первый токен в str, завершая токен нуль-символом. Из оставшейся части str можно выделить другие токены с помощью последовательных вызовов функции strtok_s. Каждый вызов функции strtok_s изменяет str, вставляя нуль-символ после токена, возвращенного этим вызовом. Указатель context продолжает отслеживать читаемую строку и место в строке, из которого следует считать следующий токен. Чтобы прочитать следующий токен из str, вызовите функцию strtok_s со значением NULL для аргумента str и передайте тот же параметр context. Аргумент NULL str вызывает strtok_s поиск следующего маркера в измененном str. Аргумент delimiters в разных вызовах может принимать любое значение, позволяя изменять набор разделителей.

context Так как параметр заменяет статические буферы, используемые вstrtok, и _strtok_lпозволяет анализировать две строки одновременно в одном потоке.

Выходное значение зависит от параметра LC_CTYPE категории языкового стандарта. Дополнительные сведения см. в разделе setlocale.

Версии этих функций без _l суффикса используют текущий языковой стандарт потока для этого поведения, зависяющего от языкового стандарта. Версии с суффиксом _l идентичны, за исключением того, что они используют языковой стандарт, указанный параметром locale . Дополнительные сведения см. в разделе Locale.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Сопоставления подпрограмм универсального текста

TCHAR.H рутина _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tcstok_s strtok_s _mbstok_s wcstok_s
_tcstok_s_l _strtok_s_l _mbstok_s_l _wcstok_s_l

Требования

Маршрут Обязательный заголовок
strtok_s <string.h>
_strtok_s_l <string.h>
wcstok_s,
_wcstok_s_l
<string.h> или <wchar.h>
_mbstok_s,
_mbstok_s_l
<mbstring.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

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

См. также

Обработка строк
Локаль
Интерпретация последовательностей многобайтовых символов
strcspn, , wcscspn_mbscspn_mbscspn_l
strspn, , wcsspn_mbsspn_mbsspn_l