第六章——字符型数据 第五节——字符串常量的定义及其与字符型常量的区别
一、字符串常量的定义
1.1 基本概念
字符串常量是用双引号括起来的一串字符,系统会自动在字符串末尾添加结束符 '\0',作为字符串的终止标志。例如:
1 | "Hello World" "123" "C" "" // 合法字符串常量 |
核心规则:
- 结束符:字符串常量的存储包含
'\0'(占1字节),实际占用内存大小为字符数加1 。 - 空字符串:
""是合法的字符串常量,仅包含'\0',占用1字节内存 。
1.2 真题实战:内存占用计算
题目:
1 | char a[7] = "a0\0a0\0"; |
答案:7 2
解析:
sizeof(a)返回数组总大小(7字节),包含所有字符和'\0'。strlen(a)遇到第一个'\0'终止,仅计算前2个字符 。
二、字符串常量 vs 字符型常量
2.1 核心区别对比
| 特性 | 字符型常量 | 字符串常量 |
|---|---|---|
| 引号类型 | 单引号 ' ' |
双引号 " " |
| 内容容量 | 仅限单字符 | 可含多字符及 '\0' 结束符 |
| 内存占用 | 1 字节 | 字符数 + 1 字节('\0') |
| 存储方式 | 直接存储 ASCII 码值 | 存储字符序列及结束符 '\0' |
2.2 常见错误与修复
| 错误类型 | 错误示例 | 修复方法 |
|---|---|---|
| 混淆单双引号 | char ch = "A"; |
改为单引号:char ch = 'A'; |
多字符赋值给 char |
char ch = 'ab'; |
改用字符数组:char str[] = "ab"; |
忽略 '\0' 的影响 |
char str[3] = "abc"; |
扩大数组长度:char str[4] = "abc"; |
三、字符串处理函数的应用
3.1 常用函数及功能
strlen:计算字符串实际长度(不包含'\0')。1
2char str[] = "Hello";
printf("%d", strlen(str)); // 输出 5strcpy:拷贝字符串(自动包含'\0')。1
2char dest[10], src[] = "C++";
strcpy(dest, src); // dest 内容为 "C++\0"strcat:拼接字符串(覆盖目标字符串的'\0')。1
2char dest[20] = "Turbo";
strcat(dest, " C++"); // dest 内容为 "Turbo C++\0"
3.2 真题解析:字符串比较与赋值
题目:
1 | char *s1 = "OK", *s2 = "ok"; |
输出:OK
解析:strcmp 按 ASCII 码逐个比较字符,区分大小写,"OK" 与 "ok" 不同 。
四、调试与实践技巧
4.1 使用 sizeof 和 strlen 的陷阱
sizeof:返回数组总大小(包含'\0')。strlen:遇到'\0'终止,仅计算有效字符数。
1 | char str[] = "\t\v\\\0will\n"; |
4.2 输入输出函数的选择
scanf+%s:读取不含空格的字符串。gets:可读取含空格的整行输入(需注意缓冲区溢出风险)。puts:输出字符串并自动换行。
1 | char str[80]; |
五、总结:字符串常量的核心法则
- 双引号包裹:字符串常量必须用双引号,末尾自动添加
'\0'。 - 内存分配:字符数组大小需至少为字符串长度加1(含
'\0')。 - 函数依赖:字符串操作依赖库函数(如
strlen,strcpy),不能直接赋值或比较 。
🎯 记忆口诀:
“双引号串单引号符,字符串尾藏 \0;字符数组存文本,库函操作避错误!”
后记
C语言中没有专门存放字符串的字符串变量,字符串如果要放在变量中,必须用字符数组(char[])来存储。为了方便区分字符串常量和字符数组,有如下示例:
1 |
|
- 标题: 第六章——字符型数据 第五节——字符串常量的定义及其与字符型常量的区别
- 作者: 亓翎_Re-Tikara
- 创建于 : 2026-02-07 02:21:28
- 更新于 : 2026-02-10 02:48:46
- 链接: https://re-tikara.fun/Blog/posts/df98f5f9/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。