私は初めてCの構造体を扱っていますが、それをよく理解していないと思うことを認めたくありません。学生のデータベース全体を作成するために、学生の構造を指すポインターの配列を構築しようとしています。問題は、複数の学生を作成すると、最初の学生の名前とコースが2番目の学生によって上書きされることです。また、名前だけの出力は本当に奇妙です。「サラ」という名前を付けると、「サラ?LG ?? fa?e」に戻りますが、コースはうまくいきます。メモリ割り当てに何か問題があるように感じますか?私たちもそれについて傾倒したばかりで、私もそれを100%理解していません。
これが私が今取り組んでいるコードの一部です:
typedef struct student Student;
struct student
{
char *name;
int age;
char *course1;
char *course2;
};
Student *Data[30];
int count = 0;
void new()
{
int age;
char name [300];
char course1 [300];
char course2 [300];
char together[300];
char remarks[300];
printf("name: ");
scanf("%s", name);
printf("age: ");
scanf("%d", &age);
printf("course-1: ");
scanf("%s", course1);
printf("course-2: ");
scanf("%s", course2);
Data[count] = malloc(sizeof(Student));
Data[count]->name = name;
Data[count]->age = age;
Data[count]->course1 = course1;
Data[count]->course2 = course2;
count++;
}
void display()
{
int i;
for(i=0; i<count; i++)
{
printf("name:\t%s\n", Data[i]->name);
printf("age:\t%d\n", Data[i]->age);
printf("course1:\t%s\n", Data[i]->course1);
printf("course2:\t%s\n", Data[i]->course2);
}
}
皆さんの助けに感謝します:)