当字符串的长度大于字符长度时会发生什么?

时间:2015-12-02 01:57:23

标签: c append c-strings

char matrix_string[1000] = "the";

在上面的代码中,是结果字符串""接下来是一堆零或垃圾值?如果我知道这个字符串会越来越大,我将该怎么做呢?

3 个答案:

答案 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(显示为零)。