feof() 함수는 파일포인터의 flags값이 _F_EOF일때 1을 반환한다.
파일 포인터의 flag 값이 _F_EOF가 되는 경우는 파일 포인터가 지정된 사이즈
만금의 데이터를 읽어 들이지 못했을 때이다.
예를 들면 다음과 같이 fread()함수를 사용해서 파일 데이터를 읽어들일 때 어떻게 feof() 함수가 작동되는 지를 확인 할 수 있다.
int nVal = 0; while(1) { if(feof()) break; // code1 : 실행안됨 fread(&nVal, 4, 1, fp); if(feof()) break; // code2 : 실행됨 }
위 코드에서 반복문을 탈출하게 되는 코드는 "code2" 코드가 된다. 즉 일반적으로 아래와 같이 사용되는 코드에서는 정확한 파일의 끝을 알 수 없을 뿐더러 읽을 값을 활용할 경우 문제를 야기시킬 수 있다.
while(!feof(fp)) { fread(&nVal, 4, 1, fp); // <- 이시점에서 파일 포인터가 _F_EOF 값을 갖게되면 아래의 코드는 문제를 일으킬 수 있다. fread(&nVal, 4, 1, fp); fread(&nVal, 4, 1, fp); }
위의 코드는 다음과 같이 수정되는 것이 보다 안전하다.
while(1) { fread(&nVal, 4, 1, fp); if(feof(fp)) break; // <-- 첫번째 데이터를 읽고 파일이 종료 되었으면 탈출! fread(&nVal, 4, 1, fp); fread(&nVal, 4, 1, fp); }
'C/C++ > C/C++일반' 카테고리의 다른 글
비트 연산자 우선순위 (0) | 2016.11.04 |
---|---|
2차원 배열 매개변수 전달 방법 (0) | 2015.10.30 |
함수 템플릿, 클래스 템플릿 을 사용하는 상황과 이유 (0) | 2015.10.30 |
함수 포인터 (0) | 2015.10.30 |
가상소멸자 사용 (0) | 2015.10.30 |