gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:22:35 25 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/45023127/

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