我在论坛上搜索了一段时间,但似乎无法解决这个问题。它编译并完成了我需要做的几乎所有事情,但有一点是关闭的。每当我更新chore_array时,这是一个指向struct chore 指针的指针,新的更新将替换所有先前的赋值。
typdef struct _chore{
char *chore_name;
int number;
char *due_date;
}chore;
typedef struct _chorelist{
chore **chore_array;
int occupied_number;
int size_of_array;
}chorelist;
void addChoreToLast(chorelist *chore_list,chore *chore_input)
{
if(chore_list->occupied_number < chore_list->size_of_array)
{
chore_list->chore_array[chore_list->occupied_number]=chore_input;
chore_list->occupied_number++;
}
else
{
chorelist *pChoreList = (struct _chorelist*)malloc(sizeof(struct _chorelist)*chore_list->occupied_number);
memcpy(pChoreList,chore_list,sizeof(struct _chorelist*)+sizeof(struct _chore*)+1);
pChoreList = chore_list;
pChoreList->chore_array[pChoreList->occupied_number]=chore_input;
pChoreList->occupied_number++;
}
代码输入:
Enter chore name : Dishes
Enter chore number : 1
Enter Date to complete: 04/21/2013
Enter another chore : Sweeping
Enter chore number : 4
Enter Date to complete: 05/02/2013
代码输出:
Entered Chores are : Sweeping, Chore Number: 1, Date: 04/21/2013
Sweeping, Chore Number: 4, Date: 05/02/2013
期望的输出:
Entered Chores are : Dishes, Chore Number: 1, Date: 04/21/2013
Sweeping, Chore Number: 4, Date: 05/02/2013
在我的main函数中,它实际上是给定且无法更改的,它调用一个初始化 chorelist 的函数,并为 chorelist 结构的每个成员分配内存,以便我可以为每个成员分配值和字符串。 我的问题是每次调用函数后都会替换杂项的名称,这会占用已经建立的杂项列表。
我的作业声明是否在 addChoreToLast 中关闭?提前致谢
答案 0 :(得分:1)
您可以使用realloc
:
void addChoreToLast(chorelist *chore_list,chore *chore_input) {
chore **p = NULL;
if(chore_list->occupied_number == chore_list->size_of_array) {
p = realloc(chore_list->chore_array, (chore_list->size_of_array + 1) * sizeof(chore *));
if(!p) {
perror("Can not allocate memory");
return;
}
chore_list->size_of_array++;
chore_list->chore_array = p;
}
chore_list->chore_array[chore_list->occupied_number]=chore_input;
chore_list->occupied_number++;
}