如果我们在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 |
----------------------------------------------
答案 0 :(得分:2)
您的理解几乎是正确的:
char label[10] = "Hello";
将使用char
初始化10字节| H | e | l | l | o |\0|\0|\0|\0|\0|
数组。
然而对于最后一种情况:
char label[10] = "0123456789";
数组也是10 char
长,用| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
初始化。因此,此数组不 null终止,不应用作C字符串。