字符数组的初始化
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 字符串。
如果我们在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=]|
.
char
数组
而对于最后一个案例:
char label[10] = "0123456789";
数组也是 10 char
长,用 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
初始化。因此,该数组 不是 空终止的,不应用作 C 字符串。