查找在字符串中的下一个标记,使用传入的当前区域设置或指定的区域设置。这些功能的更安全版本可用;请参见 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。有关更多信息,请参见 平台调用示例。