C printf数据格式要求

时间:2014-07-22 14:35:02

标签: c

如果我需要打印整数,如果我使用%f而不是%d会发生什么?或%ld而不是%d。我是否必须使用与真实数据相同的打印格式?

谢谢, 扎克

3 个答案:

答案 0 :(得分:7)

是的,说明符和数据必须匹配未定义行为的惩罚。

引自C99标准:

  
    

如果任何参数不是相应转换规范的正确类型,则行为未定义。

  

http://port70.net/~nsz/c/c99/n1256.html#7.19.6.1p9

答案 1 :(得分:1)

您将调用未定义的行为。

http://www.open-std.org/jtc1/sc22/wg14/docs/rr/dr_083.html

  

(c11,7.1.4p1)"如果函数的参数具有[...]或类型(提升后),具有可变参数个数的函数不期望,则行为未定义。 #34;

答案 2 :(得分:0)

格式说明符和参数类型必须匹配,否则行为是未定义的(意味着从垃圾输出到恶魔飞出你的鼻子)。

格式说明符不仅告诉printf如何格式化输出;它告诉函数参数的类型是什么。 printf是一个可变函数,因此它不知道提前输入的参数的类型(第一个参数除外,它总是const char * restrict)。剩下的参数只是堆栈上的一个字节墙。每个转换说明符告诉printf每个参数有多大(即1字节char,或2字节short,或4字节float等。)因此它可以获取正确大小的内存块并正确解释它。