# 空终止字节字符串

< c‎ | string

空终止字节字符串（ NTBS ）是尾随零值字节（空终止字符）的非零字节序列。字节字符串中的每个字节都是一些字符集的编码。例如，字符数组 {'\x63','\x61','\x74','\0'} 是一个以 ASCII 编码表示字符串 "cat" 的 NTBS 。

### 函数

##### 字符分类
定义于头文件 `<ctype.h>`
isalnum | 检查一个字符是否是字母或数字 (函数)
isalpha | 检查一个字符是否是英文字母 (函数)
islower | 检查一个字符是否是小写字母 (函数)
isupper | 检查一个字符是否是大写字母 (函数)
isdigit | 检查字符是否为数字 (函数)
isxdigit | 检查一个字符是否是十六进制的字符 (函数)
iscntrl | 检查一个字符是否是控制字符 (函数)
isgraph | 检查一个字符是否是可显示的字符 (函数)
isspace | 检查一个字符是否是空白字符 (函数)
isblank (C99) | 检查一个字符是否是空格字符 (函数)
isprint | 检查一个字符是否是可打印字符 (函数)
ispunct | 检查一个字符是否是一个标点符号 (函数)
##### 字符操作
tolower | 将字符转换成小写 (函数)
toupper | 将字符转换成大写 (函数)

注意：将来可能添加以 `to` 或 `is` 后随小写字母起始的新增函数到头文件 `ctype.h` ，故不应于包含该头文件的程序中定义这些函数。

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`

##### 转换成数值格式
定义于头文件 `<stdlib.h>`
atof | 将字节字符串转换成浮点值 (函数)
atoi atol atoll (C99) | 将字节字符串转换成整数值 (函数)
strtol strtoll (C99) | 将字节字符串转换成整数值 (函数)
strtoul strtoull (C99) | 将字节字符串转换成无符号整数值 (函数)
strtof strtod strtold (C99)(C99) | 将字节字符串转换成浮点值 (函数)
定义于头文件 `<inttypes.h>`
strtoimax strtoumax (C99)(C99) | 将字节字符串转换成 intmax_t 或 uintmax_t (函数)
##### 字符串操作
定义于头文件 `<string.h>`
strcpy strcpy_s (C11) | 复制一个字符串给另一个 (函数)
strncpy strncpy_s (C11) | 从一个字符串复制一定数量的字符到另一个 (函数)
strcat strcat_s (C11) | 连接两个字符串 (函数)
strncat strncat_s (C11) | 连接两个字符串的一定数量字符 (函数)
strxfrm | 变换字符串，使得 strcmp 会产生同 strcoll 的结果 (函数)
strdup (C23) | 分配字符串的副本 (函数)
strndup (C23) | 分配拥有指定大小的字符串副本 (函数)
##### 字符串检验
定义于头文件 `<string.h>`
strlen strnlen_s (C11) | 返回给定字符串的长度 (函数)
strcmp | 比较两个字符串 (函数)
strncmp | 比较两个字符串的一定数量字符 (函数)
strcoll | 比较两个字符串，根据当前本地环境 (函数)
strchr | 查找字符的首次出现 (函数)
strrchr | 查找字符的最后一次出现 (函数)
strspn | 返回由另一个字符串中的字符分割的最大起始段长度 (函数)
strcspn | 返回另一个字符串所不具有的字符分割的最大起始段长度 (函数)
strpbrk | 查找一个字符串中的任意一个字符在另一个字符串中的首个位置 (函数)
strstr | 查找子串字符的首次出现 (函数)
strtok strtok_s (C11) | 查找字节字符串中的下一个记号 (函数)
##### 字符数组操作
定义于头文件 `<string.h>`
memchr | 在数组中搜索字符的首次出现 (函数)
memcmp | 比较两块缓冲区 (函数)
memset memset_s (C11) | 以字符填充缓冲区 (函数)
memcpy memcpy_s (C11) | 将一个缓冲区复制到另一个 (函数)
memmove memmove_s (C11) | 将一个缓冲区移动到另一个 (函数)
memccpy (C23) | 复制一个缓冲区到另一个，在指定的分隔符后停止 (函数)
##### 杂项
定义于头文件 `<string.h>`
strerror strerror_s strerrorlen_s (C11)(C11) | 返回给定错误码的文本版本 (函数)

### 引用

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

  - 7.4 Character handling <ctype.h> (p: 200-204)

  - 7.8 Format conversion of integer types <inttypes.h> (p: 217-220)

  - 7.22 General utilities <stdlib.h> (p: 340-360)

  - 7.24 String handling <string.h> (p: 362-372)

  - 7.31.2 Character handling <ctype.h> (p: 455)

  - 7.31.5 Format conversion of integer types <inttypes.h> (p: 455)

  - 7.31.12 General utilities <stdlib.h> (p: 456)

  - 7.31.13 String handling <string.h> (p: 456)

  - K.3.6 General utilities <stdlib.h> (p: 604=613)

  - K.3.7 String handling <string.h> (p: 614-623)

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

  - 7.4 Character handling <ctype.h> (p: 181-185)

  - 7.8 Format conversion of integer types <inttypes.h> (p: 198-201)

  - 7.20 General utilities <stdlib.h> (p: 306-324)

  - 7.21 String handling <string.h> (p: 325-334)

  - 7.26.2 Character handling <ctype.h> (p: 401)

  - 7.26.4 Format conversion of integer types <inttypes.h> (p: 401)

  - 7.26.10 General utilities <stdlib.h> (p: 402)

  - 7.26.11 String handling <string.h> (p: 402)

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

  - 4.3 CHARACTER HANDLING <ctype.h>

  - 4.10 GENERAL UTILITIES <stdlib.h>

  - 4.11 STRING HANDLING <string.h>

  - 4.13.2 Character handling <ctype.h>

  - 4.13.7 General utilities <stdlib.h>

  - 4.13.8 String handling <string.h>

### 参阅