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
strmax
,delim
或者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
。
与其不同strtok
,wcstok
不更新静态存储:它将分析器状态存储在用户提供的位置。
与大多数其他标记器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 ++文档