【发布时间】:2016-11-20 00:20:42
【问题描述】:
如果我们在 C 中声明一个字符数组
例如:
char label[] = "Hello";
我们将在内存中有一个如下所示的数组
--------------------------
| H | e | l | l | o | \0 |
--------------------------
在数组末尾添加额外的空字节。
场景 1:
char label[10] = "Hello";
------------------------------------------
| H | e | l | l | o | \0 | | | | |
------------------------------------------
它将有额外的 4 个未使用的位置。
场景 2:
如果我们正好有一个 10 个字符的字符串,是否还会添加 \0(空字节),这使得 char 数组可以容纳 11 个字符?
char label[10] = "0123456789";
-----------------------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
-----------------------------------------
OR
----------------------------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | \0 |
----------------------------------------------
【问题讨论】:
-
使用
label[10],您可以将数组定义为正好有 10 个符号。因此,编译器不能添加第 11 个符号 (\0)。通常,您会收到一条警告,指出字符串初始化对于数组来说太长了。 -
仅供参考,C++ 不允许您使用超过 9 个字符来初始化
char label[10](当然,它会为第十个字符添加一个空字节)。 C 没有该规则(但您不能将第 11 个字符显式添加到初始化程序)。
标签: c arrays initialization c-strings