函数返回int但得到奇怪的行为

时间:2015-09-25 05:28:27

标签: c function printf return-value

我写了一些代码来计算单词中的位数。当我printf()计数它按预期打印32但是当我在函数中粘贴相同的代码并打印返回值时,它给了我一些疯狂的大数字。

然后我将代码复制/粘贴回main()打印了计数并同时打印了我的函数的返回值,并且他们都给了我32但是如果我然后注释掉{{1中的代码我的函数再次打印大数字。

任何人都知道为什么会这样?

main()

2 个答案:

答案 0 :(得分:6)

wordlength()函数中,count是一个自动局部范围变量,未显式初始化。所以,初始值是不确定的。

引用C11标准,章节§6.7.9

  

如果没有显式初始化具有自动存储持续时间的对象,则其值为   不定。 [...]

您很容易将后增量应用到它上面。它调用undefined behavior

相关,附件§J.2,未定义行为的原因,

  

使用具有自动存储持续时间的对象的值   不确定的。

因此,您的程序会展示UB并且无法保证产生任何有效结果。

解决方案:将count初始化为0。

FWIW,关于评论

  

//如果我取消注释下面的代码
                            //然后打印32就像我想要的那样

也是UB的结果。

答案 1 :(得分:4)

您必须将count初始化为0或其他内容,否则它将具有未定义的值。