scanf以不同于变量类型的格式描述符输入时,是怎么运作的?有个同学问了我这样的代码,一时间想不到原因。
int main()
{
int x;
char y,z;
scanf("%c%c%d",&x,&y,&z);
printf("\tAscii\tchar\n");
printf("x:\t%d\t%c\n",x,x);
printf("y:\t%d\t%c\n",y,y);
printf("z:\t%d\t%c\n",z,z);
return 0;
}
96 97 98
Windows 10
MinGW GCC 11.2.0 64-bit Debug
(gdb) p &x
$8 = (int *) 0x7fffffffe2bc
(gdb) p &y
$9 = 0x7fffffffe2bb ""
(gdb) p &z
$10 = 0x7fffffffe2ba "a"
(gdb)
x的地址是 0x7fffffffe2bc, y的地址是 0x7fffffffe2bb, z的地址是 0x7fffffffe2ba
最后以%d给z赋值的时候覆盖了,x和y的值
%c
格式期望后面参数类型是char*
,而你传入的是int*