未初始化的字符数组

时间:2015-09-28 06:26:20

标签: c mingw

我在执行以下代码时得到输出“ma”。如果我的理解是正确的,那么局部变量不会初始化为0.所以在这种情况下,%s如何在a1 [2]中找到0?是不是我们无法预测这种情况下的输出,我在某种程度上得到了这个结果,这可能不是总是这样的情况?

● unicorn_my_app.service - LSB: starts the unicorn app server
  Loaded: loaded (/etc/init.d/unicorn_my_app)
  Active: failed (Result: exit-code) since Sun 2015-09-27 23:22:49 PDT; 1min 19s ago
  Docs: man:systemd-sysv-generator(8)
  Process: 26576 ExecStart=/etc/init.d/unicorn_my_app start (code=exited, status=127)

1 个答案:

答案 0 :(得分:3)

是的,,除非\"a1 note ,作为一个自动本地变量,这都是 by-luck 。您的代码(代码段)会因错过终止static而生成undefined behavior

恰好将下一个字节作为null,因此正确打印 。它无处可以保证下次它会起作用。

FWIW,null格式说明符需要字符串,C中字符串的定义是%s - 终止{{1}数组。要复制确切的措辞,

  

如果不存在null长度修饰符,则参数应为指向字符类型数组的初始元素的指针。 [..]如果   如果未指定precision或者大于数组的大小,则数组应包含空字符。

注意:与char变量的初始化相关,引用l标准,章节§6.7.9,初始化,(强调我的

  

如果具有自动存储持续时间的对象未明确初始化,则其值为   不定。如果具有静态或线程存储持续时间的对象未明确初始化,则:

     
      
  • [...]

  •   
  • 如果它有算术类型,则初始化为(正数或无符号)零;

  •