以下、私が作業しているプログラムにフルコードを含めました。 '。'を入力するまで、ユーザーはプログラムへの入力を許可する必要があります。最初の名前の入力で。私は入力を一度行った後にセグメンテーションフォールトを取得しています。そして、構造体への入力を2回目にすると、それは私に違反します。私はまた、動的に構造体を割り当てることで、ユーザが入力を何度でも入力できるようにしますが、テストするために、プログラムを動作させるかどうかを調べるために10に設定します。ユーザー入力後のセグメンテーションフォルト
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
int recordCount;
char *firstName;
char *lastName;
char *id;
char *email;
};
int main()
{
struct student *aPtr;
aPtr = malloc(sizeof(struct student)*10);
//aPtr = (struct student*) malloc(10 * sizeof(struct student));
aPtr->firstName = malloc(sizeof(char)*50);
aPtr->lastName = malloc(sizeof(char)*50);
aPtr->id = malloc(sizeof(char)*10);
aPtr->email = malloc(sizeof(char)*50);
int i;
for (i = 0; i < 10; ++i) {
printf("First Name: ");
scanf("%s", (aPtr + i)->firstName);
if ((aPtr + i)->firstName[0] == '.') {
break;
}
printf("Last Name: ");
scanf("%s", (aPtr + i)->lastName);
printf("ID#: ");
scanf("%s", (aPtr + i)->id);
printf("Email: ");
scanf("%s", (aPtr + i)->email);
printf("\n");
aPtr->recordCount++;
}
for (i = 0; i < aPtr->recordCount; ++i) {
printf("%s, %s, %s, %s",(aPtr + i)->id, (aPtr + i)->firstName, (aPtr + i)->lastName, (aPtr + i)->email);
printf("\n");
}
return 0;
}
デバッガでプログラムを実行します。 –
あなたは 'aPtr [0]'のフィールドを初期化しましたが、10個のフィールドを使用しようとしています。 – Ryan
ポインタの使い方を見てください。 – Gab