C言語のmalloc関数の問題を解いています。
構造体の配列をmalloc関数で確保して、足らなくなったらrealloc関数で追加するということをしたいのですが
この確保した配列の要素数を変数に代入したら0になってしまっているのはなぜなのでしょうか?
コード #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct { char name[64]; int age; int sex; }people; void inputpeople(people[]); void showpeople(people); int main(void) { people *data; int i,size; data = (people*)malloc(sizeof(people) * 10); if (data == NULL) exit(0); size = sizeof(data) / sizeof(data[0]);/*ここのsizeに0が入ってしまう*/ printf("情報を入力して下さい。(入力終了なら年齢に-1)\n"); for (i = 0; i < size; i++) { inputpeople(&data[i]); if (data[i].age == -1) { break; } if (i == size-1) { data = (people*)realloc(data,sizeof(people) * 10); size = sizeof(data) / sizeof(data[0]); } } for (i = 0; i < size; i++) { showpeople(data[i]); } free(data); return 0; } void inputpeople(people *data) { printf("名前を入力:"); scanf("%s", data->name); printf("年齢を入力:");; scanf("%d", &data->age); printf("性別を入力(男なら1、女なら2):"); scanf("%d", &data->sex); } void showpeople(people data) { char sex[64]; printf("名前:%s\n", data.name); printf("年齢:%d歳\n", data.age); if (data.age == 1) { strcpy(sex, "男\n"); } else if (data.age == 2) { strcpy(sex, "女\n"); } else { strcpy(sex, "入力が間違っています。\n"); } printf("性別:%s", sex); }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/15 18:10