C输出背后的逻辑

时间:2014-04-28 14:33:52

标签: c

为什么以下程序的输出是

0 and Garbage Value and Garbage Value

计划是:

#include<stdio.h>
int main()
{

int a=9,b=0,x,y;
x=a&b;
y=a||b;
printf("%d %d %d");
return 0;
}

为什么第一次%d打印0?

2 个答案:

答案 0 :(得分:3)

您的代码printf("%d %d %d");调用未定义的行为

来自 7.19.6.1 C99标准的fprintf函数部分:

  

fprintf函数在由format指向的字符串的控制下将输出写入stream指向的流,该格式指定后续参数如何转换为输出。 如果格式的参数不足,则行为未定义。如果参数保留时格式已用尽,则会评估多余的参数(一如既往),否则将被忽略。当遇到格式字符串的末尾时,fprintf函数返回。

此行为也适用于printf()函数(以及sprintf()snprintf()函数)。

答案 1 :(得分:1)

您必须为printf函数提供参数,如下所示:

printf("%d %d %d %d", a, b, x, y);

如果您未提供值,则行为未定义。这意味着它不可重复。您只是从内存中获取无法保证特定内容的随机值。