У меня возникли проблемы с удалением всех записей в определенную структуру. Вот код функции для одного удаления входа и моя попытка в функции «удалить все»Удаление всех записей структуры в C Программирование
typedef struct person //Structure Set up
{
char fname[20];
char lname[20];
char number[20];
} person;
void delInfo(int num_entries,person*contacts)
{
char delfirst[20]; //Setting up Arrays to match entry
char dellast[20];
printf("\n First Name: ");
scanf("%s",delfirst);
printf(" Last Name: ");
scanf("%s",dellast);
int i=0;
for (i=0; i<num_entries; i++) //Going through contacts
{
if (strcmp(delfirst,contacts[i].fname)==0 && strcmp(dellast,contacts[i].lname)==0) //Testing for match between entry and contacts
{
for (i=i; i<num_entries-1; i++) //Shifting every contact AFTER match down one
{
contacts[i]=contacts[i+1];
}
if(num_entries !=0)
contacts=(person*)realloc(contacts,sizeof(person)*(num_entries-1)); //Freeing memory at end by way of realloc
printf("\n %s %s deleted from contacts\n\n",delfirst,dellast);
break;
}
}
if(i == num_entries)
{
printf("\n Entry Not Found\n");
}
system("pause");
}
void deleteall(int num_entries,person*contacts) //deleting all function
{
int i,j;
for(i=0;i<num_entries;i++){
contacts[i].fname=NULL;
contacts[i].lname=NULL;
contacts[i].number=NULL;
}
free(contacts);
printf("\n All contacts deleted\n\n");
system("pause");
}
Проблема в том, что они являются несовместимыми типами (пытается присвоить массив из пустоты). Могу ли я использовать какой-то цикл и использовать realloc
, чтобы сократить массив до 0? Я не уверен, как просто удалить все записи.
Можете ли вы уточнить, почему я должен использовать указатель на ' char' вместо массива 'char' для освобождения/удаления? – NLhere
@NLhere: поскольку мы динамически выделяем память с помощью 'malloc', которая всегда возвращает значение указателя. –