#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <assert.h>


typedef struct student {

int id;

char name[12];

double points;

} STUD;


STUD * read_students_binary(char *filename) {  

FILE *fp;

int i = 0;

fp = fopen(filename,"rb");

fseek(fp,0,SEEK_END);

int count = ftell(fp)/sizeof(STUD); //   파일의 STUD 개수만큼 count변수에 저장  

STUD* bin; 

bin = (STUD*)calloc(count,sizeof(STUD));  //이진파일에 저장된 구조체 수만큼 동적할당  

fread(&bin,sizeof(STUD),count-1,fp);   // 동적할당된 bin에 STUD크기만큼 count-1개를 옮겨씀  

bin[count-1].id = -1; //마지막을 표시하기위해 마지막 구조체의 id에 -1값 저장  

for(i=0;i<8;i++)   // 구조체에 잘 들어갔나 확인   

printf("%d %s %lf\n", bin[i].id, bin[i].name, bin[i].points);

fclose(fp);

return NULL;  

}


void save_students_binary(STUD *ps, char *filename) {

FILE *fd = fopen(filename, "wb");

STUD *pcur = ps;

int nitem = 0;

if (fd) {

while (pcur->id > 0) pcur++;

fwrite(ps, sizeof(STUD), pcur - ps, fd);

fclose(fd);

}

}


int main(void) {

char *filename = "binary";

STUD test_data[] = { {1, "Choi", 9.9}, {2, "Park", 0.1}, {3, "Kim", 5.0 }, 

{4, "Lee", 9.9 }, {5, "Moon", 9.5 }, {6, "Kang", 7.0 }, {7, "Jeon", 0.9 }, {-1, "", 0 } };

STUD *students = test_data;

 

save_students_binary(students, filename);

read_students_binary(filename);

return 0;

}




함수 read_students_binary에서 fread(&bin,sizeof(STUD),count-1,fp); 이부분 이렇게 하면 동적 할당된 구조체에 미리 이진파일에 저장한 구조체들이 다 복사되서 들어가는거 아닌가요??

잘들어갔나 확인하려고 

for(i=0;i<8;i++)   // 구조체에 잘 들어갔나 확인   

printf("%d %s %lf\n", bin[i].id, bin[i].name, bin[i].points);

이거 돌려보면 다 그냥 초기에 동적할당한 0값이 뜨길래 질문합니더..