<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div contenteditable="true">Add line-breaks here</div>
输入:
#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
我知道scanf中不应有0 0 51 51 51 51
33
,而应有%d
,
但是为什么%hd
是s[0],s[1]
?
当我使用0
时,输出为s[7]
并且0 46 51 51 51 51
的输出也是s[8]
答案 0 :(得分:0)
您有不确定的行为,因为正如您已经提到的%d
是错误的:您刚刚告诉scanf
&a
指向足以容纳int
的存储空间。但事实并非如此。它将覆盖堆栈中的其他数据。
对于要阅读的类型,您必须使用正确的格式说明符。这同样适用于字符串,这已经在另一个答案中进行了讨论。