C语言中没有内置的string类型,所谓字符串其实就是以空字符' '结尾的字符数组。我们在写C程序时,通常使用char数组或者char指针来保存和操作字符串,并借助string.h头文件里的函数完成常见处理。

一、C语言字符串的表示方式
最常见的两种定义形式如下:
#include <stdio.h>
int main() {
// 字符数组形式,编译器自动补' '
char str1[] = "hello";
// 字符指针指向字符串常量
char *str2 = "world";
printf("%s %sn", str1, str2);
return 0;
}
需要注意,str1是可修改的数组,而str2指向的是只读常量区,不能对其内容做写入。
二、常用string.h函数用法
1. 求字符串长度 strlen
strlen返回不包含结尾' '的字符数:
#include <stdio.h>
#include <string.h>
int main() {
char s[] = "abc";
// 输出3,不包含' '
printf("len=%lun", strlen(s));
return 0;
}
2. 字符串拷贝 strcpy
使用strcpy时要保证目标数组足够大,否则会溢出:
#include <stdio.h>
#include <string.h>
int main() {
char dest[20];
char src[] = "safe copy";
// 目标空间必须大于等于源字符串长度+1
strcpy(dest, src);
printf("%sn", dest);
return 0;
}
3. 字符串拼接 strcat
strcat把源字符串接到目标后面,同样要求目标空间充足:
#include <stdio.h>
#include <string.h>
int main() {
char buf[30] = "hello ";
strcat(buf, "world");
printf("%sn", buf);
return 0;
}
4. 字符串比较 strcmp
strcmp相等返回0,不等返回非0,不要直接用==比较:
#include <stdio.h>
#include <string.h>
int main() {
char a[] = "abc";
char b[] = "abc";
if (strcmp(a, b) == 0) {
printf("相同n");
}
return 0;
}
三、更安全的替代函数
为避免溢出,建议使用带长度限制的函数,例如strncpy、strncat、snprintf:
#include <stdio.h>
int main() {
char buf[10];
// 最多写9个字符并补' '
snprintf(buf, sizeof(buf), "%s", "longtext");
printf("%sn", buf);
return 0;
}
四、小结
在C语言里处理string相关的字符串,核心是理解字符数组和' '结尾规则,合理使用string.h中的函数,并时刻注意目标缓冲区大小。掌握这些基础,就能安全高效地完成大部分字符串操作任务。