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。有关更多信息,请参见 平台调用示例

请参见

参考

字符串操作(crt)

区域设置

多字节字符序列的说明

strcspn, wcscspn, _mbscspn, _mbscspn_l

strspn, wcsspn, _mbsspn, _mbsspn_l