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

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

· 댓글 0 · 바다야크

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언어 텍스트 파일 읽기 예제  (5) 2022.05.30
C언어 텍스트 파일 쓰기 방법  (0) 2022.05.23
삼성덱스 휴대폰 충전 방법  (1) 2022.05.18
SNS 공유하기
💬 댓글 0

이름을 저장합니다.

최근글
thumbnail 오늘 달 모양 관찰 웹사이트와 안드로이드 앱 thumbnail LG그램 숫자키패드 키 변경(키보드 리맵핑) thumbnail 11번가 아마존 해외직구 4TB 웨스턴디지털 외장 하드 디스크 thumbnail 모락 프로토 8포트 Type-C Dex USB 3.0 멀티 허브 장단점 thumbnail 유튜브 동영상 재생 위치 이동 꿀팁 thumbnail 구글 문서 쉽고 빠르게 작성 방법 서식복사 thumbnail LG 27인치 모니터 27UP850N vs. 27UP650 스펙 차이점 1 thumbnail 윈도우11 버추얼박스 USB 부팅 가상 디스크 만들기
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

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