71.6 연습문제: 파일 크기만큼 파일 읽기

다음 소스 코드를 완성하여 hello.txt 파일에서 읽은 문자열을 출력하세요.

practice_read_entire_file.c

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int getFileSize(FILE *fp)
{
    int size;
    int currPos = ftell(fp);

    fseek(_________________);
    size = ftell(fp);

    fseek(fp, currPos, SEEK_SET);

    return size;
}

int main()
{
    char *buffer;
    int size;

    FILE *fp = fopen("hello.txt", "r");

    size = getFileSize(fp);
    buffer = malloc(________);
    memset(___________________);

    fread(buffer,size, 1, fp);

    printf("%s\n", buffer);

    fclose(fp);

    free(buffer);

    return 0;
}

정답

 fp, 0, SEEK_END
 size + 1
 buffer, 0, size + 1

해설

먼저 getFileSize 함수에서 파일 크기를 구하기 위해 fseek 함수에 이동할 크기는 0, 기준점은 SEEK_END을 지정하여 파일 포인터를 파일 끝으로 이동시킵니다.

파일 크기를 구했다면 버퍼를 생성합니다. 이때 파일에서 읽은 문자열을 C 언어 문자열로 표현해야 하므로 문자열 마지막의 NULL이 들어갈 공간까지 확보해야 합니다. 따라서 할당할 메모리의 크기는 size + 1입니다. 그리고 memset 함수에 초기화할 값은 0, 크기는 size + 1을 지정하여 이전에 사용하던 메모리 값을 0으로 초기화해 줍니다.