本文最后更新于136 天前,其中的信息可能已经过时,如有错误请发送邮件至 2641805259@qq.com
1. 基本概念
C 语言中没有独立的字符串类型,字符串以字符数组存储,并以 \0 作为结束标志。debug 调试
char s[6] = "Hello";
此时数组实际长度为 6(包含结束符)。
2. 字符串的定义方式
2.1 字符数组定义
char s[10] = "Hello";
允许修改内容。
2.2 指针方式定义
char *p = "Hello";
指向字符串常量,不可修改内容。
3. 字符串输入输出
3.1 printf
printf("%s", s);
3.2 scanf
scanf("%s", s);
注意 scanf 遇空白即停止,不安全。
3.3 fgets
fgets(s, sizeof(s), stdin);
更安全,能读取空格。
4. 常用库函数(string.h)
4.1 求长度
strlen()
size_t len = strlen(s);
4.2 拷贝
copy
strcpy
strcpy(dest, src);
strncpy(dest, src, n);
4.3 拼接
strcat(dest, src);
strncat(dest, src, n);
4.4 比较
compare
返回值:int
strcmp(a, b);
strncmp(a, b, n);
返回值:0 相等;>0 :a>b;<0 a<b。
大于是字典序关系:
a < b
aa < ab
ba > ab
5. 字符串与内存安全
5.1 缓冲区溢出风险
使用 gets、不检查长度的 strcpy 都会导致溢出,应避免。
5.2 推荐安全替代
- 输入:
fgets - 拷贝:
strncpy - 拼接:
strncat
6. 字符串处理示例
示例:统计小写字母数量
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char s[100];
fgets(s, sizeof(s), stdin);
int count = 0;
for (int i = 0; s[i] != '\0'; i++) {
if (islower(s[i])) count++;
}
printf("%d", count);
return 0;
}
7. 总结
- C 字符串本质是以
\0结尾的字符数组。 - 使用库函数必须确保目标空间足够。
- 指针方式定义的字符串常量不可修改。
- 输入处理尽量采用安全函数,例如
fgets。