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


linkedList + 버블sort + 학생관리프로그램

1. 일반적인 지역변수 -> Stack에 생성. (프로그램 종료시 사라짐)

2. 동적할당 -> Heap (프로그램 종료시에도 Heap에 남아있다.); 해제 꼭해줘야한다. : 메모리 누수(leak)

c언어에서는 malloc c++에서는 new가능. 둘다 Heap 영역에 할당. 해당 메모리의 주소 반환.

3. 해제시 무조건 delete[] b;처럼 차원에 관계없이 b. 

int (*b)[50] = new int[100][50]; 에서

delete[] b;

4. 배열과 링크드 리스트.


5. 백버퍼와 프라이머리 버퍼/ 이중버퍼링/ 플립어쩌고


6. 프레임워크


7. sprintf


8. kbhit

+ Recent posts