gpt4 book ai didi

c - 当我尝试向结构添加数据时程序崩溃

转载 作者:行者123 更新时间:2023-11-30 21:01:42 24 4
gpt4 key购买 nike

我有一个程序可以将新位置添加到结构列表中。结构体定义为:

struct data
{
char name[50];
char surname[50];
float income;
float taxed_income;
char account[20];
char id[10];
struct data *next, *prev;
};

添加数据的函数是:

struct data* add_element()

{
struct data *tmp;
bool flag=true;
float input;
char inpt[50];
tmp = NULL;
do {
printf("Id: ");
fgets(inpt,49,stdin);
if(head != NULL)
flag=id_check(inpt);
}
while(!flag);
strcpy(tmp->id,inpt);
do {
printf("Name: ");
fgets(inpt,49,stdin);
flag=check(inpt);
}
while(!flag);
strcpy(tmp->name,inpt);
do {
printf("Surname: ");
fgets(inpt,49,stdin);
flag=check(inpt);
}
while(!flag);
strcpy(tmp->surname,inpt);
do {
printf("Account: ");
fgets(inpt,49,stdin);
flag=check_num(inpt);
}
while(!flag);
strcpy(tmp->account,inpt);
printf("Income: ");
scanf("%f",&input);
tmp->income=input;
printf("taxed Income: ");
scanf("%f",&input);
tmp->taxed_income=input;
return tmp;
}

当我到达第一个 strcpy 时,程序崩溃了。所有检查都确保输入符合项目规范。

最佳答案

指向您创建的数据结构的指针不指向内存中的任何内容,因为它指向 NULL。因此,当您尝试调用函数 strcpy() 时将数据复制到指针中时,程序会崩溃,因为它没有将数据复制到有效内存中。

您可能想对函数 malloc() 进行一些研究它允许您在堆上为 tmp ptr 分配内存。

像这样的东西就足够了:

tmp = malloc(sizeof(struct data));

您还应该通过添加以下行来检查 malloc() 是否返回了可以使用的内存:

assert(tmp != NULL);

注意:不要忘记包含 <assert.h>图书馆。

关于c - 当我尝试向结构添加数据时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894272/

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