提问人:JmJ 提问时间:6/1/2013 更新时间:6/1/2013 访问量:4284
当我使用错误的格式说明符时会发生什么情况?
What happens when I use the wrong format specifier?
问:
只是想知道当我在 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);
答:
20赞
Oliver Charlesworth
6/1/2013
#1
当我在 C 中使用错误的格式说明符时会发生什么?
一般来说,未定义的行为。*
但是,回想一下,这是一个可变参数函数,并且可变参数函数的参数会经历默认参数升级。例如,a 被提升为 .因此,在实践中,它们都会给出相同的结果: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 节:
如果任何参数是 不是相应转换规范的正确类型,行为是 定义。
评论
0赞
jxh
6/1/2013
是的,根据 C11 7.21.6.1 p9 未定义的行为。
0赞
fuz
3/8/2016
顺便说一句,假设 OP 代码具有类型,我在 OPs 代码中没有看到任何错误的格式说明符。x
int
-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
评论
x