非常教程

C参考手册

字符串 | Strings

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不同,对于每个后续标记,分隔符可以不同,甚至可以依赖于以前标记的内容。

示例

#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):
    • 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 ++文档

C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。