C语言字符串知识点汇总
适合编程小白的详细讲解,用大白话解释字符串相关概念和操作
字符串的本质
在C语言中,字符串就是一串字符(比如”Hello”),但实际上是以字符数组的形式存储的。
每个字符串都以一个特殊字符’\0’(空字符)结尾,值为0,表示字符串结束。
大白话解释: 想象字符串就像一列火车,每个字符是一节车厢,最后的’\0’就是车尾标志,告诉你列车结束了。
char str[] = “Hello”;
// 实际存储内容:
// [H] [e] [l] [l] [o] [\0]
字符串的创建
C语言中有两种创建字符串的方式:
1. 字符数组: 固定大小,内容可以修改
char str2[] = “World”; // 自动计算长度
2. 字符串指针: 指向字符串字面量,内容不可修改
重要区别: 字符数组方式创建的字符串可以修改内容,而字符串指针方式创建的是常量,不能修改!
字符串输入输出
输出字符串:
puts(str); // 输出后自动换行
输入字符串:
char name[50];
fgets(name, sizeof(name), stdin);
避免使用: gets()
函数不安全,容易导致缓冲区溢出,已被弃用!
常用字符串函数
C标准库提供了一系列处理字符串的函数,都在 <string.h>
头文件中。
strlen() – 字符串长度
计算字符串实际长度(不含’\0’)
strcpy() – 字符串复制
将源字符串复制到目标字符串
strcpy(dest, “Hello”);
strcat() – 字符串连接
将源字符串附加到目标字符串末尾
strcat(str, ” World!”); // 结果:”Hello World!”
strcmp() – 字符串比较
比较两个字符串内容是否相同
字符串与指针
字符串和指针紧密相关,理解指针对处理字符串很重要:
1. 字符串名是指向首字符的指针:
char *p = str; // p指向第一个字符’H’
2. 通过指针遍历字符串:
while (*p != ‘\0’) {
printf(“%c”, *p);
p++; // 移动到下一个字符
}
大白话: 指针就像一个导游,带着你在字符串中逐个访问每个字符。
常见错误
处理字符串时常见的坑:
1. 忘记预留’\0’的空间:
char str[5] = "Hello";
// 错误!缺少空间存放’\0′
2. 修改字符串常量:
char *p = "Hello"; p[0] = 'h';
// 错误!字符串常量不可修改
3. 字符串比较用 ==:
if (str1 == str2)
// 错误!比较的是地址而不是内容
4. 缓冲区溢出:
写入超过分配空间的数据,导致程序崩溃或安全漏洞
安全提示: 使用strncpy()
, strncat()
等带长度限制的安全函数