這是我的代碼:如何在指向結構體時正確使用malloc()和realloc()?
#include <stdio.h>
#include <stdlib.h>
typedef struct{
char name;
char surname;
int month;
int day;
} person;
person *ptr;
int action, number_of_friends=0, a, b, day, month;
char decision;
int main(void)
{
ptr=(person*)malloc(sizeof(person));
while(1)
{
printf("Please enter the data about the person number %d\n", number_of_friends+1);
person entered_person;
printf("Initial of the name: "); scanf(" %c", &entered_person.name);
printf("Initial of the surname: "); scanf(" %c", &entered_person.surname);
printf("The day of birth: "); scanf("%d", &entered_person.day);
printf("And the month: "); scanf("%d", &entered_person.month);
*(ptr+number_of_friends) = entered_person;
printf("Do you want to add more friends? (y/n) ");
scanf(" %c", &decision);
if (decision=='n' || decision=='N') {
break;
}
number_of_friends++;
ptr=realloc(ptr, number_of_friends);
}
number_of_friends++;
person get_person;
for (a=0; a<number_of_friends; a++)
{
get_person = *(ptr+a);
printf("Person number %d\n", a+1);
printf("Initial of the name: %c\n", get_person.name);
printf("Initial of the surname: %c\n", get_person.surname);
printf("The day of birth: %d\n", get_person.day);
printf("And the month: %d\n\n", get_person.month);
}
}
的問題是,如果人數比...像5.
我相信更大的則不會顯示輸入正確的人的名單這與malloc()和realloc()(寫出界限?)有關,但作爲初學者,我不知道如何解決這個問題。
malloc不關心結構。它只關心你想要的內存塊大小。對malloc,還有的malloc'之間沒有區別(2)'和'的malloc(的sizeof(int)的)' - 它會只看到過一個整數,並嘗試分配該大小的內存塊。 –
'PTR =的realloc(PTR,有NUMBER_OF_FRIENDS);' - >'PTR =的realloc(PTR,有NUMBER_OF_FRIENDS *的sizeof(人));' –
說不上爲什麼反引號不工作... –