반응형

하나의 파일을 다른 이름의 파일로 복사하는 프로그램을 작성하라. 이진 파일이라고 가정하고 fread()와 fwrite()를 사용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
#define SIZE 100
int main(void)
{
    FILE *fpr=NULL;
    FILE *fpw=NULL;
    char buff[SIZE];
    int count=0;
    if((fpr=fopen("first.bin","rb"))==NULL)
    {
        printf("잘못된 파일 열기1\n");
        exit(1);
    }
    if((fpw=fopen("second.bin","wb"))==NULL)
    {
        printf("잘못된 파일 열기2\n");
        exit(1);
    }
    while((count=(fread(buff,sizeof(char),SIZE,fpr)))!=0)
    {
        printf("%d",count); //몇 개 세었는지 보려고
    fwrite(buff,sizeof(char),count,fpw);
    }
    return 0;    
}
cs

buff 와 fread 나 fwrite 를 쓸 때 덩어리의 크기를 int로 하면 오류가 생길 수 있습니다. 중간에 잘리는 경우(예를들어 09에서 0과 9사이에서 잘리는 경우)

데이터가 손실되는 것을 경험하였습니다. 따라서 1byte 단위인 char로 하는 것이 가장 안전합니다. (촘촘이 자르는 것이 가장 안전하겠죠??)

예를들어 int 형으로 한다면

1000100 을 복사하면 앞의 1000만 복사가 됩니다. 뒤에 100은 덩어리 (4byte) 가 꽉 안차서 손실이 되는 것 같아요 (정확한 것 아님 결과로부터 추론한 것임 (출력값은 1이됨)

정확한 것을 아시는 분은 댓글로 달아주세요)

그런데 10001000 을 하면  10001000 이 복사되고 출력값은 2가됩니다. 따라서 덩어리를 다 채워줘야 하는 것 같습니다.






반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

텍스트 파일 비교  (0) 2017.02.11
fgets 함수  (0) 2017.02.11
대문자로 변경  (0) 2017.01.31
텍스트 파일 비교  (0) 2017.01.31
암호화와 복호화  (0) 2017.01.16

+ Recent posts