gpt4 book ai didi

c - 访问冲突写入位置 0x00D00000

转载 作者:行者123 更新时间:2023-11-30 19:55:59 26 4
gpt4 key购买 nike

我正在尝试编写这个简单的程序,该程序在一个 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");
}

最佳答案

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

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

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

另请注意给出的长度说明符,它限制了可以读入的字符数,因此它不会尝试写入超出数组末尾的内容。

关于c - 访问冲突写入位置 0x00D00000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44545745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com