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

What happens when I use the wrong format specifier?

提问人:JmJ 提问时间:6/1/2013 更新时间:6/1/2013 访问量:4284

问:

只是想知道当我在 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 格式说明符

评论

23赞 Matt Ball 6/1/2013
你为什么不试试呢......
5赞 chepner 6/1/2013
呃,不要滥用我们不能对评论投反对票的事实。:)
4赞 Jack 6/1/2013
请注意,在这种特定情况下,您没有使用错误的格式说明符...
2赞 too honest for this site 2/23/2016
没有声明,这是不可能回答的。x
4赞 fuz 3/8/2016
@MattBall 这很少是 C 问题的正确答案。

答:

20赞 Oliver Charlesworth 6/1/2013 #1

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

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

但是,回想一下,这是一个可变参数函数,并且可变参数函数的参数会经历默认参数升级。例如,a 被提升为 .因此,在实践中,它们都会给出相同的结果:printfcharint

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 节:

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

评论

0赞 jxh 6/1/2013
是的,根据 C11 7.21.6.1 p9 未定义的行为。
0赞 fuz 3/8/2016
顺便说一句,假设 OP 代码具有类型,我在 OPs 代码中没有看到任何错误的格式说明符。xint
-2赞 KrisSodroski 6/1/2013 #2

由于 x 是 A,因此第一个打印 f 将打印:“A”。

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

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

第四个将打印 65。

第 5 个将打印 128。

评论

2赞 Antti Haapala -- Слава Україні 3/8/2016
行为将完全取决于类型(问题本身未指定)。x