기본 콘텐츠로 건너뛰기

5월, 2017의 게시물 표시

feof()함수를 이용한 EOF(end of file) 까지 읽기(C,C++)

int feof(FILE *f)함수는 <stdio.h>의 함수로 파일스트림이 EOF에 도달하였가에 대한 여부를 반환한다. 파일스트림이 EOF에 도달하지 않았으면 0을 EOF이면 0이아닌 정수를 반환한다. 따라서, 다음과 같은 방법으로 파일스트림을 EOF까지 읽을 수있다. <string.h> /*생략*/ FILE *fp; char c; /*생략*/ c = fgetc(fp); while(!feof(fp)){ printf("%c",c); c = fgetc(fp); } /*생략*/ 여기서 주의해야할 점이 있다. feof()는 ^z를 읽어들이고 나서야 EOF를 알아차리고 0이 아닌값을 반환한다. 따라서 위의 예문처럼 꼭 파일스트림에서 먼저 문자를 읽어들인 후 feof()을 통해 EOF를 검사해야한다. 만약 그런 조건이 지켜지지 않는다면, fgets나 scanf("%s")와 같이 문자열 단위로 파일스트림을 읽을때 마지막에 ^z가 포함된 문자열을 그대로 사용하게 된다. 이렇게 나온 문자열은 다음 NULL이 나올때까지의 모든 쓰래기값을 포함하고있다. 특히!! dev C++에서는 컴파일시에 쓰래기값이 모두 0으로 초기화되기 때문에 실행 시 별다른 문제점을 인식할 수 없어서 더욱 조심하여야 한다.