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 不能在运行时的窗口执行的应用程序。有关更多信息,请参见 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 没有其他标记。 每个调用都通过替换 NULL 字符修改 strToken 用在返回的标记后面的第一个分隔符。
备注
strtok 功能来查找在 strToken的下一个标记。 将 strDelimit 的字符指定在当前的 strToken 将找到的标记可能的分隔符调用。 wcstok 和 _mbstok 是 strtok的宽字符和多字节字符版本。 参数和返回 wcstok 的值是宽字符字符串;这些 _mbstok 的多字节字符字符串。 这三个功能否则具有相同的行为。
安全说明 |
---|
这些函数会导致缓冲区溢出问题实现的潜在的威胁。缓冲区溢出问题是系统攻击一个常见的方案,使权限的非确保提升。有关更多信息,请参见 避免缓冲区溢出。 |
在第一次调用 strtok,导致分隔符的功能跳过并返回指向在 strToken的第一个标记,停止点与 null 字符的标记。 多个标记中打开 strToken 其余部分由一系列调用 strtok。 每个调用 strtok通过插入 null 字符修改 strToken 在该返回的 token 后调用。 若要读取 strToken的下一个标记,请调用带有一个 NULL 值的 strtokstrToken 参数的。 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。有关更多信息,请参见 平台调用示例。