字符数组的初始化

Initialisation of Character Arrays

如果我们在C中声明一个字符数组

例如:

char label[] = "Hello";

我们将在内存中有一个数组,如下所示

--------------------------
| H | e | l | l | o | [=11=] |
--------------------------

在数组末尾添加额外的空字节。

场景 1:

char label[10] = "Hello";

------------------------------------------ 
| H | e | l | l | o | [=12=] |   |   |   |   | 
------------------------------------------ 

它将有额外的 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 | [=13=] |
----------------------------------------------

你的理解基本正确:

char label[10] = "Hello";

将用 | H | e | l | l | o |[=13=]|[=13=]|[=13=]|[=13=]|[=13=]|.

初始化一个 10 字节的 char 数组

而对于最后一个案例:

char label[10] = "0123456789";

数组也是 10 char 长,用 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 初始化。因此,该数组 不是 空终止的,不应用作 C 字符串。