请在C中解释这种歧义

时间:2011-11-24 18:39:55

标签: c random

当我编译这个程序时,我得到一些随机数作为输出。在Cygwin中输出为47但在RHEL5中,它给出一些负的随机数作为输出。  谁能告诉我原因?
代码:

main()
{
printf("%d");
}

3 个答案:

答案 0 :(得分:5)

此程序会引发未定义的行为,因为它不遵循C的规则。您应该在格式字符串之后为每个格式说明符赋予printf一个参数。

在常见的C实现中,它会在指向"%d"的指针后打印出堆栈上发生的任何内容,并将其解释为整数。在其他情况下,它可能会发送demons flying out of your nose

答案 1 :(得分:2)

Undefined Behaviour

有3个计数:

  • 缺少采用可变数量参数的函数的原型
  • 通过告诉你发送1个参数并且不发送任何
  • 来说谎printf
  • 缺少从main返回值(在C99中假定为return 0;,但您的代码肯定不是C99)

任何事情都可能发生。

答案 2 :(得分:0)

printf需要第二个参数,因此它会读取该位置堆栈上发生的任何事情。基本上它是读取随机存储器并将其打印出来。