strtok_s
, , _strtok_s_l
_wcstok_s_l
wcstok_s
_mbstok_s
,_mbstok_s_l
Находит следующий токен в строке с использованием текущего или переданного языкового стандарта. Эти версии , , _strtok_l
, _mbstok_l
wcstok
_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