只是想知道当我在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);
答案 0 :(得分:13)
当我在C中使用错误的格式说明符时会发生什么?
一般来说,未定义的行为。 *
但是,请记住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:
子>如果有任何论据 不是相应转换规范的正确类型,行为是 未定义。
答案 1 :(得分:-1)
由于x是A,第一个打印f将打印:'A'。
第二个将打印A的ascii值(查找)。
第三个将打印65的ascii字符(我认为这是A或a,但它是一个字母)。
第四个将打印65.
第五个将打印128.