-1

我已经在论坛中搜索了一段时间,但似乎无法解决此问题。它编译并完成了我需要它做的几乎所有事情,但有一件事是关闭的。每当我更新 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中的赋值语句是否关闭?提前致谢

4

1 回答 1

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++;
}
于 2013-04-13T19:29:07.183 回答