字符数组的初始化

时间:2016-07-17 07:41:54

标签: c arrays initialization c-strings

如果我们在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 |
----------------------------------------------

1 个答案:

答案 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字符串。