一、字符串本质
- 以 \\0(ASCII 0)结尾的字符数组
- 没有真正的字符串类型,靠结尾标记判断长度
- 当字符数组(字符串)作为函数参数传递时:数组名会自动、隐式地转换成指向数组首元素的 char * 指针。
二、常用标准库头文件
#include <string.h>
三、最常用字符串函数(必背)
1. strlen —— 求字符串长度
size_t strlen(const char *s);
- 不计末尾 \\0
- 和 sizeof(数组) 不一样:sizeof 算整块内存,strlen 算有效字符
2. strcpy —— 字符串拷贝
char *strcpy(char *dest, const char *src);
- 把 src 连同 \\0 一起拷过去
- 不安全:不检查目标空间够不够,容易越界
3. strncpy —— 安全版拷贝
char *strncpy(char *dest, const char *src, size_t n);
- 最多拷 n 个字节
- 注意:不一定自动补 \\0,用完最好手动加
4. strcat —— 字符串拼接
char *strcat(char *dest, const char *src);
- 把 src 拼到 dest 后面
- 同样不安全,前面的可能空间不够,会造成溢出
5. strncat —— 安全拼接
char *strncat(char *dest, const char *src, size_t n);
- 最多追加 n 个字符
- 会自动补 \\0,比 strncpy 友好
6. strcmp —— 字符串比较
int strcmp(const char *s1, const char *s2);
逐字符按 ASCII 比较
返回值:
<0: s1 < s2
=0: s1 == s2
0: s1 > s2
-
不能用 == 比较字符串,必须用 strcmp
- ==比较的是地址,而不是对应的值
7. strncmp —— 前n个字符比较
int strncmp(const char *s1, const char *s2, size_t n);
8. strchr / strrchr —— 查找字符
char *strchr(const char *s, int c); // 第一次出现
char *strrchr(const char *s, int c); // 最后一次出现
- 找到返回地址,没找到返回 NULL
9. strstr —— 查找子串
char *strstr(const char *haystack, const char *needle);
- 在大串里找小串
- 返回子串第一次出现的位置
10. memset —— 按字节赋值
void *memset(void *s, int c, size_t n);
- 常用于清空数组:
char buf[100];
memset(buf, 0, sizeof(buf));
四、极易出错的点(高频考点)
五、简单记忆口诀
- 求长度用 strlen
- 拷贝用 strcpy/strncpy
- 拼接用 strcat/strncat
- 比较用 strcmp
- 找字符用 strchr
- 找子串用 strstr
- 清空用 memset



![[C++]算法双指针 复写0-171主机测评](https://www.171host.com/wp-content/uploads/2026/09/20260910013601-6aa2098179e1b-220x150.png)
