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바이트를 써줄 수 있습니다.