Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어의 EOF, getc(), feof() 함수 완벽 정리

C 언어로 파일을 처리할 때 반드시 이해해야 하는 핵심 개념 중 하나가 바로 EOF(End of File)입니다. 이 글에서는 EOF의 의미와 함께 파일에서 문자를 읽는 getc() 함수, 그리고 파일 끝 도달 여부를 확인하는 feof() 함수까지 예제 코드와 함께 자세히 살펴보겠습니다.

EOF란 무엇인가?

EOF는 End of File(파일의 끝)의 약자로, stdio.h 헤더 파일에 정의된 매크로 상수입니다. getc()와 같은 입력 함수는 파일의 끝에 도달하거나 읽기 오류가 발생하면 EOF를 반환합니다.

다음 예제를 통해 EOF의 동작 방식을 확인해 보겠습니다. 먼저 아래와 같은 내용을 담고 있는 "new.txt" 파일이 있다고 가정합니다.

This is demo!
This is demo!

예제 코드

#include <stdio.h>
int main() {
    FILE *f = fopen("new.txt", "r");
    int c = getc(f);
    while (c != EOF) {
        putchar(c);
        c = getc(f);
    }
    fclose(f);
    getchar();
    return 0;
}

실행 결과

This is demo!
This is demo!

위 프로그램에서는 fopen() 함수로 파일을 연 뒤, 정수형 변수 c가 EOF와 같지 않은 동안 계속해서 파일을 읽습니다. 즉, 파일의 끝에 도달할 때까지 문자를 하나씩 화면에 출력하는 구조입니다.

FILE *f = fopen("new.txt", "r");
int c = getc(f);
while (c != EOF) {
    putchar(c);
    c = getc(f);
}

getc() 함수

getc() 함수는 입력 스트림에서 문자 하나를 읽어 정수(int) 값으로 반환합니다. 파일의 끝에 도달하거나 오류가 발생하면 EOF를 반환합니다. 내부적으로는 문자를 unsigned char로 읽은 뒤 int로 변환하여 돌려줍니다.

C 언어에서 getc() 함수의 기본 문법은 다음과 같습니다.

int getc(FILE *stream);
  • stream: 문자를 읽어올 대상 FILE 객체에 대한 포인터입니다.
  • 반환값: 성공 시 읽어들인 문자의 정수 값, 실패 또는 파일 끝 도달 시 EOF를 반환합니다.

feof() 함수

feof() 함수는 스트림의 파일 끝 표식자(end-of-file indicator)를 검사하여, 파일 읽기가 끝에 도달했는지 확인하는 데 사용됩니다. 파일 끝에 도달한 경우 0이 아닌 값을, 아직 도달하지 않았다면 0을 반환합니다.

C 언어에서 feof() 함수의 기본 문법은 다음과 같습니다.

int feof(FILE *stream);

다음은 getc()와 feof()를 함께 활용한 예제입니다.

예제 코드

#include <stdio.h>
int main() {
    FILE *f = fopen("new.txt", "r");
    int c = getc(f);
    while (c != EOF) {
        putchar(c);
        c = getc(f);
    }
    if (feof(f))
        printf("\n Reached to the end of file.");
    else
        printf("\n Failure.");
    fclose(f);
    getchar();
    return 0;
}

실행 결과

This is demo!
This is demo!
Reached to the end of file.

위 프로그램은 fopen()으로 파일을 연 후, 변수 c가 EOF가 아닌 동안 파일 내용을 읽어 출력합니다. 이후 feof() 함수를 호출하여 파일 포인터가 실제로 파일의 끝에 도달했는지 한 번 더 확인합니다. 실행 결과 "Reached to the end of file." 메시지가 출력되는데, 이는 파일이 정상적으로 끝까지 읽혔음을 의미합니다.

정리

  • EOF: 파일의 끝을 나타내는 매크로 상수로, 입력 함수가 파일 끝이나 오류를 만나면 반환됩니다.
  • getc(): 스트림에서 문자 하나를 읽어 int 값으로 반환하며, 실패 시 EOF를 반환합니다.
  • feof(): 파일 끝 표식자를 검사하여 스트림이 파일의 끝에 도달했는지 확인합니다.