본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 텍스트 파일 읽기 예제

C언어 텍스트 파일 읽기 예제

· 댓글개 · 바다야크

C언어 텍스트 파일 읽기 함수

C언어에서 텍스트 파일 읽기에는 fopen() 함수로 파일을 열어서 fgets() 함수를 사용하는 것이 편합니다. open() 함수로 파일을 열어서 read() 함수로 파일을 읽을 수 있지만, 텍스트 파일 읽기는 fopen()와 fgets() 조합이 편한 것은 한 줄씩 읽을 수 있어서입니다.

read() 함수와 fgest() 함수 둘 다 파일 내용을 받을 수 있는 버퍼를 지정하고 버퍼 크기까지 알려 주지만, 차이라면 read() 함수는 버퍼 크기보다 파일 사이즈가 크다면 버퍼 크기만큼 읽어서 버퍼에 저장합니다. 이에 비해 gets()는 버퍼 크기만큼 파일의 내용을 읽되 한 줄의 끝을 만나면 거기까지만 담습니다.

텍스트 파일의 경우 줄 단위로 읽어서 처리하는 경우가 많기 때문에 read()보다 gets()가 더 편합니다. read() 함수를 사용해야 한다면 읽어 들인 내용을 다시 줄 바꿈이 있는지 확인해야 해서 불편합니다.

C언어 텍스트 파일 읽기 예제

// C언어 텍스트 파일 읽기 예제
#include <stdio.h>
#include <stdlib.h>

int main( void)
{
   FILE      *fp;
   char       buf[1024];
                       
   if ( fp = fopen( "./test.c", "r")) {
      fgets( buf, sizeof( buf), fp);
      printf( "%s\n", buf);

      fclose( fp);
   }
   return 0;
}

예제를 test.c로 저장하고 컴파일해서 실행하면 첫 줄인 주석문만 출력됩니다.

C언어 텍스트 파일 읽기
C언어 텍스트 파일 읽기

버퍼 buf의 크기는 1024이고 test.c의 첫 줄 주석문은 1024보다 짧지만, fgets()는 한 줄만 읽어서 반환합니다.

버퍼 크기가 작다면?

만일 한 번에 읽어 들일 문자열보다 버퍼 크기가 작으면 어떻게 될까요? fgets()는 버퍼 크기만큼 파일을 읽다가 한 줄이 끝나지 않으면 버퍼 크기보다 하나 작은 크기만큼 담고, 마지막에는 NULL 값을 넣어서 반환합니다. 이유는 NULL이 없을 경우 문자열의 끝을 알 수 없어서 실행 중 에러가 발생하기 때문입니다. NULL 문자로 문자열 끝을 알 수 없는 변수를 printf()로 출력하면 안 되겠지요.

//1234567890
#include <stdio.h>
#include <stdlib.h>

int main( void)
{
   FILE      *fp;
   char       buf[10];
                       
   if ( fp = fopen( "./test.c", "r")) {
      fgets( buf, sizeof( buf), fp);
      printf( "[%s]\n", buf);

      fclose( fp);
   }
   return 0;
}

주석문을 //123456789로 바꾸고 buf 배열 변수의 크기도 10으로 줄였습니다. 그리고 buf를 printf()로 출력하면 어떻게 될까요?

fgets() 함수 사용 예제
fgets() 함수 사용 예제

고맙게도 fgets()는 버퍼 크기보다 하나 작게 파일을 읽고 마지막 배열 요소에 NULL을 넣어 줍니다. 이렇게 fgets() 함수는 안전한 함수이지만, fgets() 함수를 호출하기 전에 습관적으로 memset() 함수로 초기화해주는 것을 강력히 권합니다.

//1234567890
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main( void)
{
   FILE      *fp;
   char       buf[10];
                       
   if ( fp = fopen( "./test.c", "r")) {
      memset( buf, 0, sizeof(buf));
      fgets( buf, sizeof( buf), fp);
      printf( "[%s]\n", buf);

      fclose( fp);
   }
   return 0;
}

'컴퓨터 > 프로그래밍' 카테고리의 다른 글

C언어 제곱 연산자, 기호는?  (0) 2022.06.03
C언어 텍스트 파일 읽기 예제  (0) 2022.05.26
C언어 텍스트 파일 쓰기 방법  (0) 2022.05.23
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.