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 不能在运行时的窗口执行的应用程序。有关更多信息,请参见 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 没有其他标记。 每个调用都通过替换 NULL 字符修改 strToken 用在返回的标记后面的第一个分隔符。

错误状态

strToken

strDelimit

context

返回值

errno

NULL

any

为 null 指针的指针

NULL

EINVAL

any

NULL

any

NULL

EINVAL

any

any

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 的多字节字符字符串。 这三个功能否则具有相同的行为。

此功能验证其参数。 如果错误状态,当处于错误状态表中,无效参数调用处理程序,如 参数验证所述。 如果执行允许继续,对 EINVAL 的这些功能集 errno 和返回 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的第一个标记,停止点与 null 字符的标记。 多个标记中打开 strToken 其余部分由一系列调用 strtok_s。 每个调用 strtok_s 通过插入 null 字符修改 strToken 在该返回的标记之后调用。 context 指针记录哪个字符串读取,并将字符串下一个标记要读取的位置。 若要读取 strToken的下一个标记,请调用带有一个 NULL 值的 strtok_sstrToken 参数的,并将同一 context 参数。 NULLstrToken 参数引起 strtok_s 搜索来修改的 strToken的下一个标记。 strDelimit 参数可以接收一个的任何值对下,以便设置分隔符可以更改。

因为 context 参数可用于 strtok 和 _strtok_l的静态缓冲区区域,同时分析两个字符串在同一线程上是可能的。

输出值受设置 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