为什么这个scanf()出错了?

时间:2018-10-26 01:46:53

标签: c

<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, 但是为什么%hds[0],s[1]

当我使用0时,输出为s[7] 并且0 46 51 51 51 51的输出也是s[8]

1 个答案:

答案 0 :(得分:0)

您有不确定的行为,因为正如您已经提到的%d是错误的:您刚刚告诉scanf &a指向足以容纳int的存储空间。但事实并非如此。它将覆盖堆栈中的其他数据。

对于要阅读的类型,您必须使用正确的格式说明符。这同样适用于字符串,这已经在另一个答案中进行了讨论。