C C++/C C++ (visual studio)
파일 포인터 / feof() 함수 사용 tip
this?
2015. 10. 30. 01:31
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); }