C 访问冲突写入位置0x00D00000

C 访问冲突写入位置0x00D00000,c,C,我正试图编写一个简单的程序,它在一个scanf函数中读取多个变量,但是在我输入后会抛出一个异常 编辑:我最初使用scanf,但它会导致一个错误,说它可能不安全 引发异常: 在Program.exe中的0x52DAB87C(ucrtbased.dll)处引发异常:0xC0000005:访问冲突写入位置0x00D00000 #include <stdio.h> #include <stdlib.h> void main() { char name[20];

我正试图编写一个简单的程序,它在一个scanf函数中读取多个变量,但是在我输入后会抛出一个异常

编辑:我最初使用scanf,但它会导致一个错误,说它可能不安全

引发异常:

在Program.exe中的0x52DAB87C(ucrtbased.dll)处引发异常:0xC0000005:访问冲突写入位置0x00D00000

#include <stdio.h>
#include <stdlib.h>


void main()
{
    char name[20];
    int age;
    char gender;
    float income;

    printf("Enter <name> <age> <gender> <income> :");
    scanf_s("%s %d %c %f", &name, &age, &gender, &income);

    printf("Name   : %s", name);
    printf("Age    : %d", age);
    printf("Gender : %c", gender);
    printf("Income : %.2f", income);

    system("pause");
}
#包括
#包括
void main()
{
字符名[20];
智力年龄;
性别;
浮动收益;
printf(“输入:”);
扫描(“%s%d%c%f”、&姓名、年龄、性别和收入);
printf(“名称:%s”,名称);
printf(“年龄:%d”,年龄);
printf(“性别:%c”,性别);
printf(“收入:%.2f”,收入);
系统(“暂停”);
}

scanf
/
scanf\u s
%s
格式说明符需要指向字符数组的第一个元素的指针,即
char*
。相反,您要传递一个数组的地址,在本例中是一个
char(*)[20]
。这些类型不兼容。为格式说明符传递错误的类型将调用

不要传入
&name
,而是传入
name
。当传递给函数时,数组衰减为指向第一个元素的指针,因此这是正确的类型

scanf_s("%19s %d %c %f", name, sizeof(name), &age, &gender, sizeof(gender), &income);

还注意给定的长度说明符,它限制了可以读取的字符数,因此它不试图写入数组的末尾。< /P>为什么使用C++标记?不确定它是否修复:<代码>名称>代码> > >代码>名称<代码>代码> Sncffs(“%s%D%C%F”,以及名称、年龄、性别、收入);代码>-->

scanf\s(“%19s%d%c%f”、姓名、20岁、年龄、性别、1岁和收入)我感觉到另一个(几乎)正确的scanf代码被用户破坏,以响应虚假的编译器消息,建议
scanf
更改为
scanf_s
提示:文本的屏幕截图往往会吸引低票。文本更容易搜索、剪切和粘贴。