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를 통해 멤버 모두를 저장해주는 것이 안전하다.


+ Recent posts