#include<stdio.h>
int main()
{
char a='x';
printf("%c %d",a);
return 0;
}
输出:
x 134513696
什么是134513696?
答案 0 :(得分:6)
垃圾。这是由于编程错误: 你只在堆栈上放了一个参数(a),但是printf从堆栈中取2个值,因为有两个百分号。
如果您打算同时拥有输出,字符及其序数值,您应该写printf("%c %d", a, a);
答案 1 :(得分:2)
如果printf()
中的格式说明符数大于传递的参数数,则未定义。
例如:
printf("%d %d %d", 1, 2); // UB
printf("%f %d %d"); // UB
但是如果参数的数量更多(比格式说明符更多),则只评估和忽略额外的参数。
例如:
printf("%d" ,1,2); //fine. Prints 1
答案 2 :(得分:2)
假设您与黑手党老板签订合同,以1000美元的价格购买一批货物。然后你只交了500美元,那天晚上你回家找到一只死猫在你的床上。你期待什么?! C是黑手党的老板,你和他签了合同。很高兴这只是你终端上的一个无用的号码,而不是你的电脑爆炸。
答案 3 :(得分:0)
printf
使用变量参数列表。它无法检查格式字符串中的参数数量(在您的情况下为2 "%c %d"
)是否与va_list(您只有一个)中的参数数量相等,因此它将获取一些未定义的参数值。如果格式字符串格式正确,编译器将不会检查您。