fwrite와 fread 함수를 사용할 때 주의할점.
#define NAME_SIZE 8
struct Str{
char name[8];
int a;
int b;
int c;
Str():a(5), b(6), c(7){
strcpy(name, "hello");
}
};
1. NAME_SIZE 8짜리로 저장시에.
(helloNNN5678) // N:NULL I:Integer
2. NAME_SIZE 16짜리로 읽을 경우.
hello 00 00 00 5 6 으로 읽힌다.
3. NAME_SIZE 32짜리로 읽을 경우.
hello로 정상적으로 읽어짐
뇌피셜) 크기 32짜리는 문자열 전체를 포함하므로. 문자열 h,e,l,l,o를 읽고
null 3개를 읽은 후, 또 Integer값을 읽으려고 시도한다. 컴파일러가 여기서 끊어줌.
문자열 - NULL - 숫자 는 변수가 될 수 없으므로 컴파일러가 끊어주어서
hello 5 6 7이 정상적으로 출력된다.
구조체의 저장과 읽기는 구조체 멤버의 크기가 변할 수 있으므로
fread와 fwrite를 통해 멤버 모두를 저장해주는 것이 안전하다.