只是想知道当我在 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
是一个可变参数函数,并且可变参数函数的参数会经历默认的参数提升。例如,字符
被提升为 int
。因此,在实践中,这些都将给出相同的结果:
char x = 'A';
printf("%c\n", x);
int y = 'A';
printf("%c\n", y);
而这是未定义的行为:
long z = 'A';
printf("%c\n", z);
如果任何参数不是相应转换规范的正确类型,则行为未定义。
由于 x 是 A,因此第一个打印 f 将打印:“A”。
第二个将打印 A 的 ascii 值(查找)。
第三个将打印 65 的 ascii 字符(我认为这是 A 或 a,但它是一个字母)。
第四个将打印 65。
第 5 个将打印 128。