구조체에 이진 파일의 내용을 읽으려고합니다. 그러나 구조체의 내용을 인쇄 할 때마다 꽤 이상한 결과가납니다.이진 파일에서 구조체를 읽을 수 없습니다
typedef enum _SEX {MALE = 'M', FEMALE = 'F', OTHER = 'O'} SEX;
이 지금 내 기능과 같습니다 정의 과정 구조체와
struct student {
char name[32];
unsigned int age;
SEX sex;
float gpa;
struct course *courses;
struct student *next;
}
: 다음은 구조체 내가 설정하려고대로
struct course {
char grade;
unsigned int number;
struct course *next;
}
그리고 SEX 정의 다음과 같습니다 :
void read_bin(char *filename){
FILE *file;
struct student myStudent;
file = fopen(filename, "rb");
if(file == NULL){
printf("Unable to open file!");
return;
}
fread(&myStudent, sizeof(struct student), 1, file);
printf("\nName: %s, Age: %d", myStudent.name, myStudent.age);
fclose(file);
}
이 이상한 출력을 받고 계속 : 잘못된 번호로 이름이 0
도 표시되지 연령 세트 :
나이. 이것은 패딩 때문일 수 있으므로 사용하려고 시도했습니다.
필요에 따라 각 요소와 패드를 읽습니다. 그러나, 나는 동일한 출력을 얻는다. 내가 정확히 내가 처리 된 것을보고 16 진 덤프를 실행하면,이 나온 것입니다 :
f0 0d 03 00 00 00 46 72 65 64 00 00 00 00 00 00 |......Fred......|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00 00 00 00 00 00 1d 00 00 00 4d 00 00 00 cd cc |..........M.....|
4c 40 01 00 00 00 44 02 00 00 41 4a 6f 65 00 00 |[email protected]|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00 00 00 00 00 00 00 00 00 00 00 16 00 00 00 4d |...............M|
00 00 00 33 33 73 40 03 00 00 00 6e 00 00 00 42 |[email protected]|
dc 00 00 00 41 54 01 00 00 41 53 61 72 61 68 00 |....AT...ASarah.|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00 00 00 00 00 00 00 00 00 00 16 00 00 00 46 00 |..............F.|
00 00 00 00 40 40 03 00 00 00 78 00 00 00 42 dc |[email protected]@....x...B.|
00 00 00 41 4a 01 00 00 43 |...AJ...C|
어떤 도움을 크게 감상 할 수있다 - 나는 잠시이 기능에 붙어 있었어요. 처음 몇 바이트가 fileheader 될 수있는 파일 형식에 따라
이름이 시작되기 전에 파일에 6 바이트가 있습니다. 레이아웃이 맞는지 확실합니까? 구조체를 읽기 전에 6 바이트를 읽거나 찾으면 어떻게됩니까? 구조체에서 포인터에 대해 뭔가를 할 필요가 있습니다. 구조체를 쓸 수없고 쓸모가 없을 것이라고 기대한다면, 목록을 탐색하고 각 필드를 개별적으로 쓰거나 읽어야합니다. 어쨌든 가장 좋은 방법입니다. –
처음에 파일이 어떻게 생성 되었습니까? 또한 '코스'와 '다음'필드는 포인터이기 때문에 다시 읽은 후에는 올바르지 않습니다. – Serge
어떻게 파일을 저장합니까? – BobRun