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

时间:2013-05-31 19:30:40

标签: c format-specifiers

只是想知道当我在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);

2 个答案:

答案 0 :(得分:13)

  

当我在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节p9:

  

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

答案 1 :(得分:-1)

由于x是A,第一个打印f将打印:'A'。

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

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

第四个将打印65.

第五个将打印128.