当我使用错误的格式说明符时会发生什么?

只是想知道当我在C中使用错误的格式说明符时会发生什么?

例如:

x = 'A'; printf("%c\n", x); printf("%d\n", x); x = 65; printf("%c\n", x); printf("%d\n", x); x = 128; printf("%d\n", x); 

当我在C中使用错误的格式说明符时会发生什么?

一般来说,未定义的行为。 *

但是,请记住printf是一个可变函数,并且可变参数函数的参数经过默认参数提升 。 因此,例如, char被提升为int 。 所以在实践中,这些都会给出相同的结果:

 char x = 'A'; printf("%c\n", x); int y = 'A'; printf("%c\n", y); 

而这是未定义的行为:

 long z = 'A'; printf("%c\n", z); 

*参见例如C99标准的第7.19.6.1节第9节:

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

由于x是A,第一个印刷品f将打印:’A’。

第二个将打印A的ascii值(查找)。

第三个将打印65的ascii字符(我认为这是A或a,但它是一个字母)。

第四个将打印65。

第五个将打印128。