3

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

2 回答 2

19

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

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

但是,回想一下,这printf是一个可变参数函数,可变参数函数的参数经过默认参数提升。例如,将 achar提升为 a 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 节:

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

于 2013-05-31T19:33:01.153 回答
-2

因为 x 是 A,所以第一个打印 f 将打印:'A'。

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

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

第四个将打印 65。

第 5 个将打印 128。

于 2013-05-31T19:33:40.513 回答