Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Находит следующий токен в строке с использованием текущего или переданного языкового стандарта. Эти версии , , _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