strtok
, _strtok_l
, wcstok
, _wcstok_l
, _mbstok
, _mbstok_l
Находят следующий токен в строке с использованием текущего или переданного языкового стандарта. Доступны более безопасные версии этих функций; см. разделstrtok_s
, _strtok_s_l
, wcstok_s
, _wcstok_s_l
, _mbstok_s
, . _mbstok_s_l
Важно!
Функции _mbstok
и _mbstok_l
не могут использоваться в приложениях, запускаемых в среде выполнения Windows. Дополнительные сведения: Функции CRT, которые не поддерживаются в приложениях универсальной платформы Windows.
Синтаксис
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
);
Параметры
strToken
Строка, содержащая токен или токены.
strDelimit
Набор символов-разделителей.
locale
Используемый языковой стандарт.
context
Указывает на память, используемую для хранения внутреннего состояния средства синтаксического анализа, чтобы средство синтаксического анализа ушло с того места, где он был выключен при следующем вызове wcstok
.
Возвращаемое значение
Возвращает указатель на следующий токен, найденный в strToken
. Функции возвращаются NULL
, когда маркеры больше не найдены. Каждый вызов изменяется strToken
путем замены символа NULL для первого разделителя, который возникает после возвращенного маркера.
Комментарии
Функция strtok
находит следующий токен в strToken
. Набор символов в параметре strDelimit
указывает возможные разделители токенов, которые требуется найти в strToken
во время текущего вызова. Функцииwcstok
и _mbstok
are wide-character и multibyte-character versions of strtok
для расширенных и многобайтовых символов. Аргументы и возвращаемое значение являются wcstok
строками расширенных символов. Аргументы argumets и возвращаемое значение являются _mbstok
многобайтовыми строками символов. В остальном эти три функции ведут себя идентично.
Версия с двумя аргументами не является стандартной wcstok
. Если вам нужно использовать эту версию, необходимо определить _CRT_NON_CONFORMING_WCSTOK
перед вами #include <wchar.h>
(или #include <string.h>
).
Важно!
Эти функции представляют потенциальную угрозу, связанную с проблемой переполнения буфера. Проблемы переполнения буфера — это распространенный метод атак на системы, который приводит к несанкционированному повышению уровня прав. Дополнительные сведения см . в статье Предотвращение переполнения буфера.
При первом вызове функции strtok
она пропускает ведущие разделители и возвращает указатель на первый токен в strToken
, завершая токен нуль-символом. Из оставшейся части strToken
можно выделить другие токены с помощью последовательных вызовов функции strtok
. Каждый вызов изменяется strtok
strToken
путем вставки символа NULL после возвращаемого token
этим вызовом. Чтобы прочитать следующий токен из strToken
, вызовите функцию strtok
со значением NULL
аргумента strToken
. Значение NULL
аргумента strToken
приводит к тому, что функция strtok
ищет следующий токен в измененной строке strToken
. Аргумент strDelimit
в разных вызовах может принимать любое значение, позволяя изменять набор разделителей.
На выходное значение влияет настройка LC_CTYPE
категории языкового стандарта. Для получения дополнительной информации см. setlocale
.
Версии этих функций без суффикса _l
используют текущий языковой стандарт для этого поведения, зависяющего от языкового стандарта. Версии с суффиксом _l
идентичны, за исключением того, что они используют переданный параметр языкового стандарта. Для получения дополнительной информации см. Locale.
Примечание
Каждая функция использует статическую локальную в потоке переменную для разбора строки на токены. Поэтому эти функции могут вызвать одновременно несколько потоков без нежелательных последствий. Однако в пределах одного потока чередование вызовов одной из этих функций с большой степенью вероятности приводит к повреждению данных и получению неточных результатов. При синтаксическом анализе разных строк сначала завершите анализ одной строки, а затем начинайте анализ следующей. Кроме того, помните о потенциальной опасности, возникающей при вызове одной из этих функций из цикла, в котором также вызывается другая функция. Если другая функция использует одну из этих функций, произойдет чередование последовательностей вызовов, что приведет к повреждению данных.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см. статью Глобальное состояние в CRT.
Сопоставления подпрограмм с универсальным текстом
TCHAR.H Обычной |
_UNICODE и _MBCS не определены |
_MBCS Определенные |
_UNICODE Определенные |
---|---|---|---|
_tcstok |
strtok |
_mbstok |
wcstok |
_tcstok |
_strtok_l |
_mbstok_l |
_wcstok_l |
Требования
Подпрограмма | Обязательный заголовок |
---|---|
strtok |
<string.h> |
wcstok |
<string.h> либо <wchar.h> |
_wcstok_l |
<tchar.h> |
_mbstok , _mbstok_l |
<mbstring.h> |
Дополнительные сведения о совместимости см. в разделе Compatibility.
Пример
// 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
См. также раздел
Манипуляция со строками
Локаль
Интерпретация последовательностей многобайтовых символов
strcspn
, wcscspn
, _mbscspn
, _mbscspn_l
strspn
, wcsspn
, _mbsspn
, _mbsspn_l