我在执行以下代码时得到输出“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)
答案 0 :(得分:3)
是的,,除非\"
是a1
note ,作为一个自动本地变量,这都是 by-luck 。您的代码(代码段)会因错过终止static
而生成undefined behavior。
恰好将下一个字节作为null
,因此正确打印 。它无处可以保证下次它会起作用。
FWIW,null
格式说明符需要字符串,C中字符串的定义是%s
- 终止{{1}数组。要复制确切的措辞,
如果不存在
null
长度修饰符,则参数应为指向字符类型数组的初始元素的指针。 [..]如果 如果未指定precision或者大于数组的大小,则数组应包含空字符。
注意:与char
变量的初始化相关,引用l
标准,章节§6.7.9,初始化,(强调我的)
如果具有自动存储持续时间的对象未明确初始化,则其值为 不定。如果具有静态或线程存储持续时间的对象未明确初始化,则:
[...]
如果它有算术类型,则初始化为(正数或无符号)零;