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

JmJ*_*JmJ 1 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);
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 13

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

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

但是,回想一下,它printf是一个可变函数,并且可变参数函数的参数经过默认参数提升.例如,a char被提升为int.所以在实践中,这些都会产生相同的结果:

char x = 'A';
printf("%c\n", x);

int y = 'A';
printf("%c\n", y);
Run Code Online (Sandbox Code Playgroud)

而这是未定义的行为:

long z = 'A';
printf("%c\n", z);
Run Code Online (Sandbox Code Playgroud)


*参见例如C99标准的第7.19.6.1节第9节:

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