C

wcstok_s

wcstok, wcstok_s

在头文件中定义
(1)
wchar_t * wcstok(wchar_t * str,const wchar_t * delim,wchar_t ** ptr);(自C95以来)(直到C99)
wchar_t * wcstok(wchar_t * restrict str,const wchar_t * restrict delim,wchar_t ** restrict ptr);(自C99以来)
wchar_t * wcstok_s(wchar_t * restrict str,rsize_t * restrict strmax,const wchar_t * restrict delim,wchar_t ** restrict ptr);(2)(自C11以来)

1)在由指向的以空字符结尾的宽字符串中查找下一个标记str。分隔符字符由指向的由空字符结尾的宽字符串标识delim

该函数被设计为被称为倍数时间以从相同的字符串获得连续的令牌。

  • 如果str != NULL该呼叫被视为wcstok该特定宽字符串的第一个呼叫。该函数搜索包含在其中的第一个宽字符delim

2)同(1),所不同的是在每一个步骤中,写入的字符数向左看在str*strmax。重复呼叫(使用null str)必须通过strmax,并ptr与以前调用存储的值。此外,在运行时检测到以下错误,并调用当前安装的约束处理函数,而不在指向的对象中存储任何内容ptr

  • strmaxdelim或者ptr是空指针

作为所有边界检查函数,wcstok_s只有在被__STDC_LIB_EXT1__实现定义__STDC_WANT_LIB_EXT1__并且1在包含之前用户定义为整数常量时才能保证可用wchar.h

参数

str-指向以空字符结尾的宽字符串的标记
delim-指向以空字符结尾的宽字符串标识分隔符的指针
ptr-指向wchar_t *类型的对象的指针,wcstok和wcstok_s用它来存储解析器的内部状态
strmax-指向最初保存str大小的对象的指针:wcstok_s存储待检查的字符数

返回值

如果没有其他标记,则返回指向下一个标记或空指针开头的指针。

注意

这个函数具有破坏性:它将L'\0'字符写入字符串的元素中str。特别是,宽字符串不能用作第一个参数wcstok

与其不同strtokwcstok不更新静态存储:它将分析器状态存储在用户提供的位置。

与大多数其他标记器wcstok不同,对于每个后续标记,分隔符可以不同,甚至可以依赖于以前标记的内容。

示例

#include <wchar.h> #include <stdio.h> int main(void) { wchar_t input[] = L"A bird came down the walk"; printf("Parsing the input string '%ls'\n", input wchar_t *buffer; wchar_t *token = wcstok(input, L" ", &buffer while(token) { printf("%ls\n", token token = wcstok(NULL, L" ", &buffer } printf("Contents of the input string now: '" for(size_t n = 0; n < sizeof input / sizeof *input; ++n) input[n] ? printf("%lc", input[n]) : printf("\\0" puts("'" }

输出:

Parsing the input string 'A bird came down the walk' A bird came down the walk Contents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'

参考

  • C11标准(ISO/IEC 9899:2011):

另请参阅

strtokstrtok_s(C11)在字节字符串(函数)中查找下一个标记

| 用于wcstok |的C ++文档