首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

wcstok

在头文件<wchar.h>中定义

(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
  • 如果没有找到这样的宽字符,那么根本就没有标记str,并且函数返回一个空指针。
  • 如果找到这样的宽字符,它就是令牌开始。然后,从功能上为所述第一宽字符点搜索包含在delim
    • 如果没有找到这样的宽字符,str只有一个令牌,并且将来的调用wcstok将返回一个空指针
    • 如果找到这样的宽字符,它将被替换为空宽字符L'\0',并且解析器状态(通常是指向下一个宽字符的指针)将存储在用户提供的位置*ptr
  • 该函数然后将指针返回到令牌的开始处
  • 如果str == NULL该调用被视为对以下调用wcstok:该函数将继续从之前调用中离开的位置相同*ptr。该行为与指向最后一个检测到的令牌后的宽字符的指针传递为相同str

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

  • strmaxdelim或者ptr是空指针
  • 在非初始调用(带有空值str)上,*ptr是一个空指针
  • 在第一次通话时,*strmax是零或大于RSIZE_MAX/sizeof(wchar_t)
  • 搜索令牌的末尾到达源字符串的末尾(如初始值所测量的那样*strmax)),而不会遇到空终止符

作为所有边界检查函数,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不同,对于每个后续标记,分隔符可以不同,甚至可以依赖于以前标记的内容。

示例

代码语言:javascript
复制
#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("'");
}

输出:

代码语言:javascript
复制
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):
    • 7.29.4.5.7 wcstok函数(p: 437-438)
    • K.3.9.2.3.1 wcstok_s函数(p: 645-646)
  • C99标准(ISO/IEC 9899:1999):
    • 7.24.4.5.7 wcstok函数(p: 383-384)

另请参阅

strtokstrtok_s(C11)

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

| 用于wcstok |的C ++文档

扫码关注腾讯云开发者

领取腾讯云代金券