scanf(或)printf中的格式说明符错误

时间:2012-10-10 23:33:50

标签: c input printf scanf

printf函数而言,我从以下几篇参考文献和实验中了解到以下内容。

  • 当我们尝试使用用于float(或)double 的格式说明符打印整数值时,反之亦然,行为不可预测
  • 但是可以使用%c来打印等价于整数值的字符。也可以使用%d来打印字符的ASCII值(整数表示)。

同样,scanf的行为是什么,如果格式说明符的不匹配以及传递给scanf的争论。标准是否定义了它?

1 个答案:

答案 0 :(得分:4)

可变参数(与省略号匹配的参数...)是默认提升。这意味着所有较短的整数类型都会提升为int(或根据需要无符号)。整数和字符之间没有区别(I believe)。 %d%cprintf之间的差异仅仅是格式化的值。

scanf是一种不同的鱼。您传递的所有参数都是指针。指针之间没有默认促销,并且传递与指针类型匹配的确切格式说明符至关重要。

在任何一种情况下,如果您的格式说明符与提供的参数不匹配(例如,将int *传递给%p中的printf),则结果为未定义的行为,这远比“不可预测”更糟糕 - 这意味着你的程序根本就是格式错误。