본문으로 바로가기
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 애플 맥북 클립보드 확장 앱 추천 Maccy thumbnail 애플 맥북에어 컨트롤과 코맨드 키보드 기능 바꾸기 thumbnail 애플 맥북과 윈도우 한영 전환 방법 통일 thumbnail 애플 맥북 에어 시간대 변경 방법 2 thumbnail 윈도우와 갤럭시 태더링 반자동 연결 방법 3 thumbnail 갤럭시 갤러리 사진 그림자 지우기 인공지능 편집 기능 2 thumbnail 윈도우 쉬프트 스페이스 한영전환 프로그램 jwShiftSpaceKey 48 thumbnail 구글 크롬 캐럿 브라우징 유용한 기능 두 가지
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

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