Ich habe Probleme beim Löschen aller Einträge in einer definierten Struktur. Hier ist der Funktionscode für einen einzelnen Eintrag Löschen und mein Versuch, eine Funktion „alle löschen“Löschen aller Struktureinträge in C Programmierung
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");
}
Das Problem ist, dass sie inkompatible Typen sind (versuchen, Array von Leere zuweisen). Kann ich einfach eine Art Schleife verwenden und realloc
verwenden, um das Array auf 0 zu verkürzen? Ich bin mir nicht sicher, wie ich alle Einträge löschen soll.
Kannst du erklären, warum ich einen Zeiger auf 'verwenden muss char 'anstelle eines Arrays von' char', um die Zuordnung aufzuheben/zu löschen? – NLhere
@NLhere: weil wir Speicher dynamisch mit 'malloc' zuweisen, der immer einen Zeigerwert zurückgibt. –