This question already has answers here:
Result of Printf (“%d”, &a)
(3个答案)
Undefined, unspecified and implementation-defined behavior
(8个答案)
2年前关闭。
输入:
输出:
我知道scanf中不应该是
但是为什么
当我使用
并且
(3个答案)
Undefined, unspecified and implementation-defined behavior
(8个答案)
2年前关闭。
#include<stdio.h>
int main()
{
char s[6];
short a;
scanf("%s%d",s,&a);
for(int i=0;i<6;i++) printf("%d ",s[i]);
printf("\n%d\n",a);
return 0;
}
输入:
2.3333 33
输出:
0 0 51 51 51 51
33
我知道scanf中不应该是
%d
,而应该是%hd
,但是为什么
s[0],s[1]
是0
?当我使用
s[7]
输出是0 46 51 51 51 51
并且
s[8]
输出也是0 0 51 51 51 51
最佳答案
您有未定义的行为,因为您已经提到%d
是错误的:您只是告诉scanf
&a
指向足以容纳int
的存储。但事实并非如此。它将覆盖堆栈中的其他数据。
您必须为要读取的类型使用正确的格式说明符。字符串也是如此,这已经在另一个答案中讨论过了。
关于c - 为什么这个scanf()出错了? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53000334/
10-12 19:19