char matrix_string[1000] = "the";
在上面的代码中,是结果字符串""接下来是一堆零或垃圾值?如果我知道这个字符串会越来越大,我将该怎么做呢?
答案 0 :(得分:2)
每次使用少于数组的项目初始化数组时,数组的其余部分将初始化为零。使用字符串文字作为初始化程序也不例外。当您使用字符串文字初始化数组时,字符串后面的所有数组元素都将初始化为零。
以下引用来自C11规范,§6.7.9第21段(重点补充)
如果括号括起的列表中的初始值设定项少于此值 是聚合的元素或成员,或者是一个或多个字符 string literal用于初始化已知大小的数组 是数组中的元素,聚合的其余部分应为 隐式初始化与具有静态存储的对象相同 持续时间强>
这就是§6.7.9第10段关于具有静态存储持续时间
的对象初始化的说法如果具有静态或线程存储持续时间的对象不是 显式初始化,然后:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则初始化为(正数或无符号)零;
- 如果是聚合,则根据这些规则初始化(递归)每个成员,并将任何填充初始化为零 比特;
- 如果是联合,则根据这些规则初始化(递归)第一个命名成员,并初始化任何填充 为零位;
所以行
char matrix_string[1000] = "the";
将't'
,'h'
,'e'
,'\0'
放入数组的前四个元素中,并将其他996个元素设置为0
。
答案 1 :(得分:0)
取决于。
如果matrix_string
是全局变量,则其余字节初始化为零。
如果matrix_string
是局部变量,那么剩余的字节(在前四个字节之后包括尾随的nul)是未初始化的。
答案 2 :(得分:0)
是结果字符串“the”后跟一堆零或垃圾值?
在“the”之后将全部为零(或NULL字符)。您可以通过printf matrix_string[5]
进行检查,例如,使用不同的控件%c
(不显示任何内容)和%d
(显示为零)。