一、字符分类函数
以下是 C 语言中 <ctype.h> 头文件字符分类函数的汇总表格:
| 函数 | 功能描述 |
|---|---|
iscntrl(c) |
判断字符是否为控制字符(如 \n、\t、\r 等不可打印的控制类字符) |
isspace(c) |
判断字符是否为空白字符(包括空格、\f、\n、\r、\t、\v) |
isdigit(c) |
判断字符是否为十进制数字(0-9) |
isxdigit(c) |
判断字符是否为十六进制数字(0-9、a-f、A-F) |
islower(c) |
判断字符是否为小写字母(a-z) |
isupper(c) |
判断字符是否为大写字母(A-Z) |
isalpha(c) |
判断字符是否为字母(a-z 或 A-Z) |
isalnum(c) |
判断字符是否为字母或数字(a-z、A-Z、0-9) |
ispunct(c) |
判断字符是否为标点符号(非字母、非数字的可打印图形字符,如!、,、; 等) |
isgraph(c) |
判断字符是否为图形字符(可打印且非空白的字符,即排除空格的可打印字符) |
isprint(c) |
判断字符是否为可打印字符(包括图形字符和空白字符) |
所有函数的参数为字符的 ASCII 码(通常传入 char 类型会自动转换),返回值为非 0(真)或 0(假)。
这些函数都比较类似,因此我们可以拿一个函数来讲

islower 是能够判断参数部分的 c 是否是⼩写字⺟的。
通过返回值来说明是否是⼩写字⺟,如果是⼩写字⺟就返回⾮0的整数,如果不是⼩写字⺟,则返回0。
。
二、字符转换函数
在 C 语言中,<ctype.h> 头文件除了字符分类函数,还提供了两个常用的字符转换函数,用于大小写字母之间的转换:
| 函数 | 功能描述 |
|---|---|
tolower(int c) |
若字符 c 是大写字母(A-Z),则返回对应的小写字母(a-z);否则返回原字符。 |
toupper(int c) |
若字符 c 是小写字母(a-z),则返回对应的大写字母(A-Z);否则返回原字符。 |

1.将小转大,如图: 
2.将大转小,如图:
三、strlen的模拟实现和使用

- 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包
- 含 '\0' )。
- 参数指向的字符串必须要以 '\0' 结束。
- 注意函数的返回值为size_t,是⽆符号的( 易错 )
- strlen的使⽤需要包含头⽂件
- 学会strlen函数的模拟实现
如图:
;
strlen的模拟实现:
实现思路
- 接收一个字符串(
char*类型指针)作为参数。 - 初始化一个计数器,记录字符个数。
- 遍历字符串:只要当前字符不是
\0,计数器加 1,指针向后移动一位。 - 当遇到
\0时,停止遍历,返回计数器的值。
方式一:计数器方式

方式二:递归方式(无计算器)

方式三:指针相减

四、strcyp的模拟实现和使用

- 源字符串必须以 '\0' 结束。
- 会将源字符串中的 '\0' 拷⻉到⽬标空间。
- 目标空间必须⾜够⼤,以确保能存放源字符串。
- ⽬标空间必须可修改。
- 学会模拟实现。
模拟实现:

五、strcat的模拟实现和使用
- 源字符串必须以 '\0' 结束。
- ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
- ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
- ⽬标空间必须可修改。
- 字符串⾃⼰给⾃⼰追加,如何?
示例:

模拟实现:

六、strcmp的模拟实现和使用
- 第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
- 第⼀个字符串等于第⼆个字符串,则返回0
- 第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字
- 那么如何判断两个字符串? ⽐较两个字符串中对应位置上字符ASCII码值的⼤⼩。
示例:

模拟实现:

七、strncpy函数的使用

与 strcpy 的区别
| 特性 | strcpy |
strncpy |
|---|---|---|
| 复制长度 | 复制整个源字符串(直到 \0) |
仅复制前 n 个字符 |
| 终止符 | 自动复制源字符串的 \0 |
仅当源字符串长度 < n 时,才用 \0 填充剩余位置;否则需手动添加 |
| 安全性 | 低(易缓冲区溢出) | 较高(可指定复制长度) |

八、strnact函数的使用
| 特性 | strcat |
strncat |
|---|---|---|
| 拼接长度 | 无限制,拼接源字符串的全部内容 (直到 \0) |
有长度限制,最多拼接 n 个字符 |
| 终止符处理 | 自动复制源字符串的 \0,拼接后目标字符串末尾有且仅有一个 \0 |
无论是否复制满 n 个字符,最终会强制添加一个 \0 |
| 安全性 | 低(若源字符串过长,易导致目标空间溢出) | 较高(通过 n 限制拼接长度,避免溢出) |
| 适用场景 | 明确源字符串长度≤目标剩余空间时 | 需要精确控制拼接字符数量的场景(如用户输入截断) |

九、strncmp函数的使用 
与 strcmp 的区别
| 特性 | strcmp |
strncmp |
|---|---|---|
| 比较长度 | 比较整个字符串(直到 \0) |
仅比较前 n 个字符 |
| 终止条件 | 遇到不相等字符或 \0 时终止 |
遇到不相等字符或比较满 n 个字符时终止 |
| 安全性 | 低(若字符串无 \0,会越界比较) |
较高(通过 n 限制比较长度) |
| 适用场景 | 需完整比较字符串时 | 需精确控制比较长度的场景(如版本号比较 v1.2 和 v1.2.3 的前 4 个字符) |

十、strstr 的使⽤和模拟实现

示例:

模拟实现:

十一、strtok函数的使用

strtok 是字符串分割的常用工具,适合按固定分隔符拆分字符串(如 CSV 格式、命令行参数等),但需注意其对原字符串的修改和线程安全性限制。

十二、strerror函数的使用

在使用的话需要添加头文件<error.h>
strerror 是 "错误码翻译器",通过它可以将抽象的错误码转换为人类可读的文字描述,是调试和错误处理的重要工具,尤其在文件操作、网络编程等容易出错的场景中频繁使用。

举例:

perror函数的使用
perror 是简化错误信息输出的工具,适合快速调试或输出错误日志,其本质是 strerror(errno) 的 "一键打印版",使用起来比 strerror 更简洁。
| 特性 | perror |
strerror |
|---|---|---|
| 功能 | 直接打印错误信息(含自定义提示) | 返回错误信息字符串(需手动打印) |
| 输出方式 | 自动输出到标准错误流(stderr) |
需配合 printf 等函数输出 |
依赖 errno |
直接使用当前 errno 的值 |
需要显式传入错误码(通常是 errno) |
| 输出格式 | 自动添加冒号、空格和换行符 | 仅返回字符串,格式需手动控制 |
示例:
