# 空终止宽字符串

< c‎ | string

空终止宽字符串（ NTWS ）是以空字符为结尾的合法宽字符序列。

### 函数

##### 字符分类
定义于头文件 `<wctype.h>`
iswalnum (C95) | 检查宽字符是否为字母或数字 (函数)
iswalpha (C95) | 检查宽字符是否为字母 (函数)
iswlower (C95) | 检查宽字符是否为小写 (函数)
iswupper (C95) | 检查宽字符是否为大写 (函数)
iswdigit (C95) | 检查宽字符是否为数字 (函数)
iswxdigit (C95) | 检查宽字符是否为十六进制字符 (函数)
iswcntrl (C95) | 检查宽字符是否为控制字符 (函数)
iswgraph (C95) | 检查宽字符是否为图形字符 (函数)
iswspace (C95) | 检查宽字符是否为空白符 (函数)
iswblank (C99) | 检查宽字符是否为空格 (函数)
iswprint (C95) | 检查宽字符是否为打印字符 (函数)
iswpunct (C95) | 检查宽字符是否为标点符号 (函数)
iswctype (C95) | 按照指定的 `LC_CTYPE` 类别分类宽字符 (函数)
wctype (C95) | 查找当前 C 本地环境中的字符分类类别 (函数)
##### 字符操作
定义于头文件 `<wctype.h>`
towlower (C95) | 将宽字符转换为小写 (函数)
towupper (C95) | 将宽字符转换为大写 (函数)
towctrans (C95) | 按照指定的 LC_TYPE 映射分类进行字符映射 (函数)
wctrans (C95) | 查找当前 C 本地环境中的字符映射类别 (函数)

ASCII值 (十六进制) | 字符 | `iscntrl` `iswcntrl` | `isprint` `iswprint` | `isspace` `iswspace` | `isblank` `iswblank` | `isgraph` `iswgraph` | `ispunct` `iswpunct` | `isalnum` `iswalnum` | `isalpha` `iswalpha` | `isupper` `iswupper` | `islower` `iswlower` | `isdigit` `iswdigit` | `isxdigit` `iswxdigit`
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
0 - 8 | `0x00-0x08` | 控制码 (`NUL`等) | `≠0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0`
9 | `0x09` | 制表符 (`\t`) | `≠0` | `0` | `≠0` | `≠0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0`
10 - 13 | `0x0A-0x0D` | 空白符 (`\n`, `\v`, `\f`, `\r`) | `≠0` | `0` | `≠0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0`
14 - 31 | `0x0E-0x1F` | 控制码 | `≠0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0`
32 | `0x20` | 空格 | `0` | `≠0` | `≠0` | `≠0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0`
33 - 47 | `0x21-0x2F` | `!"#$%&'()*+,-./` | `0` | `≠0` | `0` | `0` | `≠0` | `≠0` | `0` | `0` | `0` | `0` | `0` | `0`
48 - 57 | `0x30-0x39` | `0123456789` | `0` | `≠0` | `0` | `0` | `≠0` | `0` | `≠0` | `0` | `0` | `0` | `≠0` | `≠0`
58 - 64 | `0x3a-0x40` | `:;<=>?@` | `0` | `≠0` | `0` | `0` | `≠0` | `≠0` | `0` | `0` | `0` | `0` | `0` | `0`
65 - 70 | `0x41-0x46` | `ABCDEF` | `0` | `≠0` | `0` | `0` | `≠0` | `0` | `≠0` | `≠0` | `≠0` | `0` | `0` | `≠0`
71 - 90 | `0x47-0x5A` | `GHIJKLMNOPQRSTUVWXYZ` | `0` | `≠0` | `0` | `0` | `≠0` | `0` | `≠0` | `≠0` | `≠0` | `0` | `0` | `0`
91 - 96 | `0x5B-0x60` | `[\]^_`` | `0` | `≠0` | `0` | `0` | `≠0` | `≠0` | `0` | `0` | `0` | `0` | `0` | `0`
97 -102 | `0x61-0x66` | `abcdef` | `0` | `≠0` | `0` | `0` | `≠0` | `0` | `≠0` | `≠0` | `0` | `≠0` | `0` | `≠0`
103-122 | `0x67-0x7A` | `ghijklmnopqrstuvwxyz` | `0` | `≠0` | `0` | `0` | `≠0` | `0` | `≠0` | `≠0` | `0` | `≠0` | `0` | `0`
123-126 | `0x7B-0x7E` | `{|}~` | `0` | `≠0` | `0` | `0` | `≠0` | `≠0` | `0` | `0` | `0` | `0` | `0` | `0`
127 | `0x7F` | 退格符 (`DEL`) | `≠0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0` | `0`

##### 转换成数值格式
定义于头文件 `<wchar.h>`
wcstol wcstoll (C95)(C99) | 将宽字符串转换成整数值 (函数)
wcstoul wcstoull (C95)(C99) | 将宽字符串转换成无符号整数值 (函数)
wcstof wcstod wcstold (C99)(C95)(C99) | 将宽字符串转换成浮点值 (函数)
定义于头文件 `<inttypes.h>`
wcstoimax wcstoumax (C99)(C99) | 将宽字符串转换成 intmax_t 或 uintmax_t (函数)

##### 字符串操作
定义于头文件 `<wchar.h>`
wcscpy wcscpy_s (C95)(C11) | 将一个宽字符串复制给另一个 (函数)
wcsncpy wcsncpy_s (C95)(C11) | 将一定量的宽字符从一个字符串复制到另一个 (函数)
wcscat wcscat_s (C95)(C11) | 将一个宽字符串的副本后附于另一个 (函数)
wcsncat wcsncat_s (C95)(C11) | 将一定量宽字符串从一个宽字符串后附到另一个 (函数)
wcsxfrm (C95) | 变换宽字符串，使得 `wcscmp` 会产生与 `wcscoll` 相同的结果 (函数)
##### 字符串检验
定义于头文件 `<wchar.h>`
wcslen wcsnlen_s (C95)(C11) | 返回宽字符串的长度 (函数)
wcscmp (C95) | 比较两个宽字符串 (函数)
wcsncmp (C95) | 比较来自两个宽字符串的一定量字符 (函数)
wcscoll (C95) | 根据当前本地环境比较两个宽字符串 (函数)
wcschr (C95) | 查找宽字符在宽字符串中的首次出现 (函数)
wcsrchr (C95) | 查找宽字符在宽字符串中的最后一次出现 (函数)
wcsspn (C95) | 返回仅由另一个宽字符串中出现的宽字符分隔的最长首段长度 (函数)
wcscspn (C95) | 返回仅由不出现于另一个宽字符串中的宽字符分隔的最长首段长度 (函数)
wcspbrk (C95) | 查找一个宽字符串中的任何字符在另一个宽字符串中的首个位置 (函数)
wcsstr (C95) | 查找一个宽字符串在另一个宽字符串中的首次出现 (函数)
wcstok wcstok_s (C95)(C11) | 查找宽字符串中的下一个记号 (函数)

##### 宽字符数组操作
定义于头文件 `<wchar.h>`
wmemcpy wmemcpy_s (C95)(C11) | 在两个不重叠的数组间复制一定数量的宽字符 (函数)
wmemmove wmemmove_s (C95)(C11) | 在两个可能重叠的数组间复制一定数量的宽字符 (函数)
wmemcmp (C95) | 比较两个数组中一定数量的宽字符 (函数)
wmemchr (C95) | 在宽字符数组中查找宽字符的首次出现 (函数)
wmemset (C95) | 将给定的宽字符复制到宽字符数组的所有位置 (函数)

### 类型

定义于头文件 `<stddef.h>`
定义于头文件 `<stdlib.h>`
定义于头文件 `<wchar.h>`
wchar_t | 可保有任何合法宽字符的整数类型 (typedef)
定义于头文件 `<wchar.h>`
定义于头文件 `<wctype.h>`
wint_t (C95) | 可保有任何合法宽字符，并至少多出一个值的整数类型 (typedef)
定义于头文件 `<wctype.h>`
wctrans_t (C95) | 保有本地环境特定的字符映射的标量类型 (typedef)
wctype_t (C95) | 保有本地环境特定的字符分类的标量类型 (typedef)

### 宏

定义于头文件 `<wchar.h>`
定义于头文件 `<wctype.h>`
WEOF (C95) | 用于指示错误的 wint_t 类型的非字符值 (宏常量)
定义于头文件 `<wchar.h>`
定义于头文件 `<stdint.h>`
WCHAR_MIN (C95) | wchar_t 的最小合法值 (宏常量)
WCHAR_MAX (C95) | wchar_t 的最大合法值 (宏常量)

### 引用

- C11 标准（ISO/IEC 9899:2011）：

  - 7.19 Common definitions <stddef.h> (p: 288)

  - 7.29 Extended multibyte and wide character utilities <wchar.h> (p: 402-446)

  - 7.30 Wide character classification and mapping utilities <wctype.h> (p: 447-454)

  - 7.31.16 Extended multibyte and wide character utilities <wchar.h> (p: 456)

  - 7.31.17 Wide character classification and mapping utilities <wctype.h> (p: 457)

  - K.3.3 Common definitions <stddef.h> (p: 585)

  - K.3.9 Extended multibyte and wide character utilities <wchar.h> (p: 627-651)

- C99 标准（ISO/IEC 9899:1999）：

  - 7.17 Common definitions <stddef.h> (p: 254)

  - 7.24 Extended multibyte and wide character utilities <wchar.h> (p: 348-392)

  - 7.25 Wide character classification and mapping utilities <wctype.h> (p: 393-400)

  - 7.26.12 Extended multibyte and wide character utilities <wchar.h> (p: 402)

  - 7.26.13 Wide character classification and mapping utilities <wctype.h> (p: 402)

- C89/C90 标准（ISO/IEC 9899:1990）：

  - 4.1.5 Common definitions <stddef.h>

### 参阅