簡単に言うと、構造体を宣言しました。
typedef struct
{
char* studentID;
char* studentName;
int* studentScores;
}STUDENT;
次に、ポインタを宣言し、ポインタと各要素にメモリを割り当てました。
STUDENT* studentPtr = NULL;
if ((studentPtr = (STUDENT*) calloc (5, sizeof(STUDENT))) == NULL)
{
printf("Not enough memory\n");
exit(100);
}
{
if ((studentPtr->studentID = (char*) calloc (20, sizeof(char))) == NULL)
{
printf("Not enough memory\n");
exit(100);
}
if ((studentPtr->studentName = (char*) calloc (21, sizeof(char))) == NULL)
{
printf("Not enough memory\n");
exit(100);
}
if ((studentPtr->studentScores = (int*) calloc (5, sizeof(int))) == NULL)
{
printf("Not enough memory\n");
exit(100);
}
その後、ファイルから5つのレコードを読み込みたいのですが、インクリメントのためにプログラムを実行しようとするとエラーが発生します。(「charstudentName [20];」のようなものがあれば問題なく動作します)希望する結果を得るには、ポインターをどのようにインクリメントする必要がありますか?ポインタ表記である必要があります。
STUDENT* ptr = studentPtr;
while (*count < MAX_SIZE)
{
fscanf(spData, "%s %*s %*s %*d %*d %*d %*d %*d", ptr->studentName)
(*count)++;
ptr++;
}
File Content:
Julie Adams 1234 52 7 100 78 34
Harry Smith 2134 90 36 90 77 30
Tuan Nguyen 3124 100 45 20 90 70
Jorge Gonzales 4532 11 17 81 32 77
Amanda Trapp 5678 20 12 45 78 34
最後の質問です。構造体を宣言したままにして、メモリを適切に割り当てた場合。使い終わったらどうすれば解放できますか?こんな感じでいいの?
for (STUDENT* ptr = studentPtr; ptr < studentPtr + *count; ptr++)
{ //*count is the number of records
free(ptr->studentID);
free(ptr->studentName);
free(ptr->studentScores);
}
free(studentPtr);