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으로 초기화되기 때문에 실행 시 별다른 문제점을 인식할 수 없어서 더욱 조심하여야 한다.
파일스트림이 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으로 초기화되기 때문에 실행 시 별다른 문제점을 인식할 수 없어서 더욱 조심하여야 한다.
댓글
댓글 쓰기