gpt4 book ai didi

c - 动态分配的结构数组

转载 作者:行者123 更新时间:2023-11-30 14:26:06 25 4
gpt4 key购买 nike

我已经尝试了几个小时才能使此功能正常工作。这是作业:

Add: Request the part name, price, and quantity. Save the information to a dynamically allocated array of structs. You may allocate space for up to 3 structs at a time. You will need to create more memory dynamically as needed. Use this struct (you may use typedef if you want to):

到目前为止我的代码是

typedef struct  {
char* name;
float price;
int quantity;
}part;


void add(part *item, int *part_count)
{
//char temp[100];

if (!item){
item = malloc(sizeof(part)*3);
}
else{
item = realloc(item, sizeof(part) * ((*part_count*3) + 1));
}

item[*part_count].name = malloc(sizeof(char)*64); // max of 64 characters

printf("Please enter item name: \n");
//fgets(temp, strlen(temp), stdin);
//sscanf(temp, "%s", item[*part_count].name);
scanf("%64s", item[*part_count].name);

printf("Please enter item price: \n");
//fgets(temp, strlen(temp), stdin);
//sscanf(temp, "%f", &item[*part_count].price);
scanf("%f", &item[*part_count].price);

printf("Please enter item quantity: \n");
//fgets(temp, strlen(temp), stdin);
//sscanf(temp, "%d", &item[*part_count].quantity);
scanf("%d", &item[*part_count].quantity);

*part_count = *part_count+ 1;
}

我曾尝试使用 fgets()sscanf() 获取输入,但使用该代码它永远不允许用户输入数据,然后结束该函数。

我认为问题出在我的内存分配上,因为当我尝试对数组执行任何操作(例如打印出内容)时,我会遇到段错误。

最佳答案

大概,第一次调用 add() 时,item 将为 NULL,并且您将对其进行初始分配;随后调用 realloc 以使数组达到所需大小的 3 倍(我认为这不是您真正想要的)。

但是与 item 匹配的参数不会因调用 add() 而改变,因此它保持为 NULL,并且每次调用 add() 的行为就好像它是初始调用一样,为 3 个结构分配空间(当您添加第四个结构时,这将是一个问题)。

您可以将 item 设为 **part,并在当前使用部件的任何地方使用 *part,以便保留指针的新值(您可以将 *part 的地址作为参数传递)。或者使用 item 的新值作为函数的返回值,恕我直言,这更干净一些。 (这就是引用参数派上用场的地方,但 C 没有这样的东西。)

关于c - 动态分配的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9611992/

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