2013-08-29 22 views
-3
int a=9,b=6,c=3; 
printf("%d%d%d"); 

我在代码块10.05中执行此操作。我有一些垃圾值。但在一个网站上,输出结果为3 6 9.什么是正确的?该声明的正确输出是什么?

+5

'printf(“%d%d%d”);'参数丢失 - 未定义的行为。 –

+1

这是未定义的行为,并且有很多重复。 –

回答

3

您将得到垃圾值,因为您没有向printf()调用提供任何参数。

正确的代码将

printf("%d%d%d",c,b,a); 

(获取号码引用的顺序)

+0

但“垃圾”值可能确实是a,b和c的值;问题是实际打印的内容是未定义的。它确实可能是“3 6 9”,但也可能是其他任何东西。 –

+0

正确 - 我想严格来说,“这是正确的输出”这个问题的答案是它没有定义。但是,我认为OP想知道是什么导致他没有想到的行为,而不是技术上正确但信息量较少的回应:) – ahnlak

+0

@ ErnestFriedman-Hill本地变量存储在堆栈中。因此,当调用printf()时,它会在该堆栈中搜索其变量类型的_variable reference_。但是,如果没有提供任何变量名称,则无法将**格式说明符**与变量名称进行映射,然后直接从FIFO中按FIFO顺序获取该值。 –

2

正确的既不是你所描述的两个。由于没有值传递给printf,因此只有格式化程序,当前堆栈中的任何内容(未定义)都会被传递。

0

该声明的正确输出是什么?

此代码调用未定义的行为,因此没有正确的输出。输出未定义。

该代码调用未定义的行为,因为您传递给printf的格式字符串要求您传递比您提供的(0)更多的参数(3)。

相关问题