71.8 연습문제: 텍스트 파일 복사 프로그램 만들기

다음 소스 코드를 완성하여 hello.txt 파일의 내용을 출력하면서 hello2.txt 파일로 복사되게 만드세요.

practice_text_file_copy.c

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

int main()
{
    int count;
    char buffer[5] = { 0, };

    FILE *src = fopen("hello.txt", "r");
    FILE *dest = fopen("hello2.txt", "w");

    while (feof(src) == 0)
    {
        __________________________________________________
        printf("%s", buffer);
        __________________________________________________
        memset(buffer, 0, 5);
    }

    fclose(dest);
    fclose(src);

    return 0;
}

정답

 count = fread(buffer, sizeof(char), 4, src);
 fwrite(buffer, sizeof(char), count, dest);

해설

buffer의 크기가 5바이트입니다(문자 4바이트, NULL 1바이트). 따라서 hello.txt 파일의 내용을 5바이트씩 읽어서 hello2.txt 파일에 4바이트씩 쓰면 됩니다.

count = fread(buffer, sizeof(char), 4, src);와 같이 hello.txt(src)에서 sizeof(char) 1바이트 크기로 4번 읽고, 읽은 횟수를 count에 저장합니다. 그리고 fwrite(buffer, sizeof(char), count, dest);와 같이 hello2.txt(dest)에 1바이트 크기로 count 횟수만큼 저장하면 됩니다.

여기서 4가 아닌 count 횟수만큼 저장하는 이유는 파일이 4바이트 단위로 딱 끊어지지 않고 약간 남는 경우가 있기 때문입니다. 즉, 파일 끝부분에서 3바이트만큼 읽었다면 복사되는 파일의 끝에도 3바이트를 써줄 수 있습니다.