Menu
CoddyTech

空字符终止符

本课属于 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 字符串函数确定字符串起止位置的基础。

challenge icon

挑战

简单

编写一个 C 程序,演示如何逐个字符手动初始化并正确添加空终止符,从而创建和处理字符串。程序应当:

  1. 声明一个名为 name、恰好有 5 个元素的字符数组
  2. 逐个字符手动初始化 name 数组,使其拼出 "John",并正确添加空终止符:
    • 第一个元素:'J'
    • 第二个元素:'o'
    • 第三个元素:'h'
    • 第四个元素:'n'
    • 第五个元素:'\0'(空终止符)
  3. 声明第二个名为 city、恰好有 7 个元素的字符数组
  4. 逐个字符手动初始化 city 数组,使其拼出 "Boston",并正确添加空终止符:
    • 分别为 'B'、'o'、's'、't'、'o'、'n' 和 '\0' 赋值
  5. 使用 printf 和 %s 格式说明符打印两个字符串
  6. 通过创建第三个名为 test、有 4 个元素的字符数组,演示没有空终止符时会发生什么
  7. 只用字符 'A'、'B'、'C'、'D' 初始化 test(不添加空终止符)
  8. 使用 %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;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C 在线编译器