ファイルから読み取った構造へのポインターを返したい (基本的にデータを出力するだけの別の関数に移動する) 関数は int sem を介して (シリアル番号 -1) を取得し、設定するfseek で読み取りたい構造体の先頭へのファイル ポインターを取得し、単純に構造体全体を読み取ってポインターを返します。(例: ファイルに書かれている構造体の数が 5 で、4 番目の構造体を読みたい場合、関数が取得する sem 値は 3 であり、fseek ポインターを使用すると、最初の 3 つの構造体をスキップし、関数は最初の 3 つの構造体を読み込んで返します。構造 no.4)。sem 値が 0 の場合は正常に動作しますが、他の構造を探すとうまくいきません。何が悪いのかわからない!ヘルプ?:)
type_seminar *file_seminars_search(int sem) {
type_seminar *temp_s = (type_seminar*) malloc(sizeof(type_seminar));
FILE *f_sem;
if ((f_sem = fopen("seminars.bin", "r")) != NULL ) {
fseek(f_sem, sem * sizeof(type_seminar), SEEK_SET);
fread(temp_s, sizeof(type_seminar), 1, f_sem);
fclose(f_sem);
return (temp_s);
} else
printf("Cannot access file. \n ");
return 0;
}
構造の定義:
typedef struct {
char s_title[A];
char s_street[B];
char s_town[C];
int max_no_teachers;
int no_applied_teachers;
} type_seminar;
そして、問題がここにある場合にデータを出力する関数:
void seminar_details(type_seminar *temp_s) {
printf(" SEMINAR TITLE : %s", temp_s->s_title);
printf(" Street: %s ", temp_s->s_street);
printf(" Town: %s", temp_s->s_town);
printf(" Max no of applied teachers: %d \n", temp_s->max_no_teachers);
printf(" No of applied teachers: %d \n", temp_s->no_applied_teachers);
}