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_slocale
使用的区域设置。
返回值
返回指向在 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。有关更多信息,请参见 平台调用示例。