This question already has answers here:
Result of Printf (“%d”, &a)
                                
                                    (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