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


strtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l

Найдите следующий токен в строке, используя текущий языковой стандарт или языковой стандарт передаваемыми.Здесь представлены версии strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l с усовершенствованной безопасностью, как описано в разделе Средства безопасности в CRT.

Важное примечаниеВажно

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

char *strtok_s(
char *strToken,
const char *strDelimit,
   char **context
);
char *_strtok_s_l(
char *strToken,
const char *strDelimit,
   char **context,
_locale_tlocale
);
wchar_t *wcstok_s(
wchar_t *strToken,
const wchar_t *strDelimit, 
   wchar_t**context
);
wchar_t *_wcstok_s_l(
wchar_t *strToken,
const wchar_t *strDelimit, 
   wchar_t**context,
_locale_tlocale
);
unsigned char *_mbstok_s(
unsigned char*strToken,
const unsigned char *strDelimit, 
   char **context
);
unsigned char *_mbstok_s(
unsigned char*strToken,
const unsigned char *strDelimit, 
   char **context,
_locale_tlocale
);

Параметры

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

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

  • context
    Используется для хранения данных о положении между вызовами метода strtok_s

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

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

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

Условия возникновения ошибки

strToken

strDelimit

context

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

errno

NULL

любое значение

указатель на пустому указателю

NULL

EINVAL

любое значение

NULL

любое значение

NULL

EINVAL

любое значение

любое значение

NULL

NULL

EINVAL

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

Заметки

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

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

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

Функция 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 функция пропустит ведущие разделителей и возвращает указатель на первый токен в strToken, конечный токен с нулем-символом.Несколько токенов можно выйти из оставшейся части strToken серией вызовы strtok_s.Каждый вызов strtok_s изменяется с strToken нуль-символ после вставки токена, возвращаемого этим вызовом.Указатель context отслеживает, какая строка читается там, где в строке следующий токен быть чтение.Для чтения следующий токен из strToken, вызовите свойство strtok_s со значением NULL в качестве аргумента strToken и передать один и тот же параметр context.Аргумент NULLstrToken вызывает strtok_s для поиска следующего токена в измененном strToken.Аргумент strDelimit может принимать любое значение из одного вызова следующему, чтобы набор разделителей мог меняться.

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

Выходное значение зависеть на параметром параметра категории LC_CTYPE языкового стандарта; дополнительные сведения см. в разделе setlocale.Версии этих функций без суффикса _l используют текущий языковой стандарт для данной функциональности, зависящей от языкового стандарта; версии с суффиксом _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);
        }
    }
}
  
  

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

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

См. также

Ссылки

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

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

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

strcspn, wcscspn, _mbscspn, _mbscspn_l

strspn, wcsspn, _mbsspn, _mbsspn_l