4.2 字符数组与字符串
单片机里你要做的事情之一就是:通过串口发一段文字、在 OLED 上显示一句话。这些"文字"在 C 语言里就是字符数组。
// 字符串本质就是一个 char 数组,末尾有个隐藏的 \0(空字符)
char name[] = "STM32"; // 等价于:char name[6] = {'S','T','M','3','2','\0'};
// 长度是 5 个字符 + 1 个 \0 = 6 个字节
printf("%s\n", name); // %s 打印字符串,碰到 \0 就停
在内存里的样子:
┌────┬────┬────┬────┬────┬────┐
│ S │ T │ M │ 3 │ 2 │ \0 │
└────┴────┴────┴────┴────┴────┘
0 1 2 3 4 5 ← \0 是结束标记,不是可显示字符
重点:
- "hello" 在内存里实际是 {'h','e','l','l','o','\0'} — 多了一个隐藏的 \0
- \0 (空字符) 的值就是 0,用来标记字符串的结束
- printf("%s", str) 从第一个字符开始打印,遇到 \0 就停
- 声明字符数组时要留够 \0 的位置
char msg[10] = "OK"; // 没问题,OK + \0 只占3个字节
char msg2[3] = "OK"; // 也OK,刚好够放 O + K + \0
char msg3[2] = "OK"; // ❌ 错误!没地方放 \0,这样会出大问题
👉 到单片机上有什么用?