空字符终止符
本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 13 课,共 63 课。
你已经学过,C 中的字符串是字符数组,但有一个关键细节能让它们正常工作:每个 C 字符串都必须以一个特殊字符结尾,这个字符叫作空终止符,写作 \0。
空终止符是 ASCII 值为零的字符,用于标记字符串的结尾。如果没有它,像 printf 这样的函数就不知道字符串在哪里结束,会继续读取内存,直到偶然遇到一个零字节,这通常会产生乱码输出。
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// \0 告诉 C:“The string ends here”当你用 "Hello" 这样的字面值初始化字符串时,C 会自动为你添加空终止符。但当你逐个字符手动构建字符串时,必须记得在末尾添加 \0。
这就是为什么像 "Hello" 这样由 5 个字符组成的单词需要一个包含 6 个元素的字符数组:多出的一个位置用于存放 \0。理解这个概念很重要,因为这是所有 C 字符串函数确定字符串起止位置的基础。
挑战
简单编写一个 C 程序,演示如何逐个字符手动初始化并正确添加空终止符,从而创建和处理字符串。程序应当:
- 声明一个名为
name、恰好有 5 个元素的字符数组 - 逐个字符手动初始化
name数组,使其拼出 "John",并正确添加空终止符:- 第一个元素:'J'
- 第二个元素:'o'
- 第三个元素:'h'
- 第四个元素:'n'
- 第五个元素:
'\0'(空终止符)
- 声明第二个名为
city、恰好有 7 个元素的字符数组 - 逐个字符手动初始化
city数组,使其拼出 "Boston",并正确添加空终止符:- 分别为 'B'、'o'、's'、't'、'o'、'n' 和
'\0'赋值
- 分别为 'B'、'o'、's'、't'、'o'、'n' 和
- 使用
printf和%s格式说明符打印两个字符串 - 通过创建第三个名为
test、有 4 个元素的字符数组,演示没有空终止符时会发生什么 - 只用字符 'A'、'B'、'C'、'D' 初始化
test(不添加空终止符) - 使用
%s打印test数组,以展示不可预测的输出
输出应按以下格式显示结果:
Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]这个挑战将检验你对手动构造字符串的理解、对 C 字符串中空终止符 '\0' 重要性的认识,以及 printf 使用 %s 时如何依靠查找空终止符来确定字符串的结束位置。
亲手试试
#include <stdio.h>
int main() {
// TODO: 在这里编写你的代码
// 按要求声明并初始化字符数组
// 输出结果
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器