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 не поддерживаются при /ZW.

char *strtok(
   char *strToken,
   const char *strDelimit 
);
wchar_t *wcstok(
   wchar_t *strToken,
   const wchar_t *strDelimit 
);
unsigned char *_mbstok(
   unsigned char*strToken,
   const unsigned char *strDelimit 
);
unsigned char *_mbstok(
   unsigned char*strToken,
   const unsigned char *strDelimit,
   _locale_t locale
);

Параметры

  • strToken
    Строка, содержащая токен или токены.

  • strDelimit
    Набор разделителей.

  • locale
    Языковой стандарт, который необходимо использовать.

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

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

Заметки

Функция strtok находит следующий токен в strToken.Набор символов в strDelimit указаны возможные разделителей токенов, который необходимо найти в strToken на текущем вызове.wcstok и _mbstok — двубайтовая и многобайтовая символьные версии strtok.Аргументы и возвращаемое значение wcstok являются строками из двубайтовых символов; они же в _mbstok являются строками с многобайтовых символов.В остальных случаях эти три функции ведут себя идентично.

Примечание о безопасностиПримечание по безопасности

Эти функции создают потенциальную угрозу, принесенную вместе с проблемой переполнения буфера.Ошибки переполнения буфера — частый метод атаки системы, в результате которого происходит несанкционированное получение прав.Дополнительные сведения см. в разделе Как избежать переполнения буфера.

При первом вызове функции strtok функция пропустит ведущие разделителей и возвращает указатель на первый токен в strToken, конечный токен с нулем-символом.Несколько токенов можно выйти из оставшейся части strToken серией вызовы strtok.Каждый вызов strtok изменяет strToken, вставив нуль-символ после объекта token, возвращаемого этим вызовом.Для чтения следующий токен из strToken, вызовите свойство strtok со значением NULL для аргумента strToken.Аргумент NULLstrToken вызывает strtok для поиска следующего токена в измененном strToken.Аргумент strDelimit может принимать любое значение из одного вызова следующему, чтобы набор разделителей мог меняться.

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

ПримечаниеПримечание

Каждая функция использует переменную для локального статическую строку для анализа на токены.Следовательно, несколько потоков могут одновременно вызывать эти функции без нежелательного влияния.Однако в один поток, чередования вызовы к одной из этих функций очень может быть повреждение данных и неточные.Анализируя различные строковые, завершение анализа одной строки до запуска анализа следующее.Кроме того, помните о возможных для риску при вызове одной из этих функций из цикла, другой функции.Если другая функция приведет к с помощью одной из функций, чередовать последовательность вызовов, приведет к активирующ повреждение данных.

Универсальное текстовое сопоставление функций

Функция 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>

_mbstok, _mbstok_l

<mbstring.h>

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

Пример

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

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Управление строками (CRT)

Языковой стандарт

Интерпретация последовательностей многобайтового символов

strcspn, wcscspn, _mbscspn, _mbscspn_l

strspn, wcsspn, _mbsspn, _mbsspn_l