Добавить указатель структуры в конец указателя структур
Я искал форумы некоторое время, но не могу решить эту проблему. Он компилирует и делает почти все, что мне нужно, но одна вещь отключена. Всякий раз, когда я обновляю chore_array, который является указателем указателей на структуру 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
В моей основной функции, которая по сути задана и не может быть изменена, она вызывает функцию, которая инициализирует список chorelist и выделяет память каждому члену структуры структуры chorelist, чтобы я мог назначать значения и строки символов каждому из его членов. Моя проблема в том, что имя рутинной работы заменяется после каждого вызова функции, которая принимает список уже созданной рутинной работы.
Мой оператор присваивания в addChoreToLast выключен? заранее спасибо
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++;
}