定義済みの構造体にすべてのエントリを削除するのに問題があります。ここでは、「すべてを削除」機能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'でメモリを動的に割り当てるためです。 –