반응형
임의의 실수 100개를 생성시킨 후에 텍스트 파일과 이진 파일로 저장하여 보고 그 크기를 비교하여 보라.
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 27 28 29 30 31 32 33 34 35 36 | #include <stdio.h> #include <stdlib.h> #include <time.h> #define SIZE 100 int main(void) { FILE *fp1=NULL; FILE *fp2=NULL; int i; double arr[SIZE]; srand((unsigned)time(NULL)); if((fp1=fopen("first.bin","wb"))==NULL) { printf("파일 오픈 실패1\n"); exit(1); } if((fp2=fopen("abc.txt","w"))==NULL) { printf("파일 오픈 실패2\n"); exit(1); } for(i=0;i<SIZE;i++) { arr[i]=(double)rand()/RAND_MAX; //RAND_MAX는0xfff(32767) 이다. } //c언어의 rand 함수는 0에서 32767을 반환한다. (double)rand();를사용하면 이진파일과 텍스트파일의 크기가 달라진다. fwrite(arr,sizeof(double),SIZE,fp1); for(i=0;i<SIZE;i++) { fprintf(fp2,"%lf",arr[i]); } fclose(fp1); fclose(fp2); return 0; } | cs |
rand 함수를 다르게 다용하면 텍스트 파일과 바이너리 파일의 크기가 다르게 생성되는 경우가 있습니다. 그 이유는 바이너리 상의 특정 문자가
텍스트로 저장될 때 2byte로 저장되기 때문입니다. 줄바꿈 문자인데, 이것 때문에 몇바이트, 많으면 몇십바이트씩 차이가 생기게 됩니다.
따라서 데이터베이스를 저장할 때는 꼭 바이너리 형태로 저장을 하도록 합시다.
반응형
'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글
단어 바꾸기 (0) | 2017.02.18 |
---|---|
특정 단어 찾기 (0) | 2017.02.18 |
도서 관리 프로그램 (0) | 2017.02.17 |
줄 번호 붙이기 (0) | 2017.02.17 |
사용자 입력 텍스트 파일 저장 (0) | 2017.02.13 |