해결된 질문
작성
·
389
0
안녕하세요. 강의 13.5 10: 57 부근에 대한 질문입니다.
교수님께서 강의를 진행하시는 대로 그대로 코드를 작성하고 실행하였으나,
0부터 144짜지 2의 간격으로 깔끔하게 출력되던 교수님의 결과창과 달리 제 출력 결과는 마치 주소값을 나타내듯 불규칙한 -값의 연속, 그리고 중간중간 0과 정수 등이 섞여있는 결과를 보여주었습니다.
바이너리 파일이 2진 데이터 그대로의 파일이기 때문에, 파일 내부에 어떠한 값이 들어있을지는 출력해보기 전까지 모르고
또 출력되더라도 다른 컴퓨터의 결과와 완전히 동일한 결과가 출력되지 않을 수 있는 것이 정상인가요?
혹시 제가 코드를 잘못 작성했는지 비교해보았으나 그런 것 같지는 않습니다.
답변 1
1
코드를 다시 살펴보시겠어요?
실수가 될 법한 포인트들을 짚어드리자면,
우선 아래의 코드가 제대로 작성되었는지 확인해보세요. parr 안에 값이 잘 대입되었는지 디버깅해보시거나 printf로 확인해보셔도 좋습니다.
for (int n = 0; n < 123; ++n) {
*(parr + n) = n * 2;
// printf("%d ", *(parr + n));
}
fwrite의 첫 번째 인자는 &parr가 아닌 parr입니다.
fwrite(&d, sizeof(d), 1, fp);
fwrite(&n, sizeof(n), 1, fp);
fwrite(parr, sizeof(int), n, fp);
아래와 같이 출력되었는지 확인해보세요.
for (int i = 0; i < n; i++)
printf("%d ", *(parr + i));
printf("\n");
혹은 아래의 코드를 그대로 돌려보셔도 좋습니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
{
FILE * fp = fopen("binary_file", "wb");
double d = 1.0 / 3.0;
int n = 123;
int * parr = (int *)malloc(sizeof(int) * n);
if (!parr) exit(1);
for (int n = 0; n < 123; ++n) {
*(parr + n) = n * 2;
// printf("%d ", *(parr + n));
}
fwrite(&d, sizeof(d), 1, fp);
fwrite(&n, sizeof(n), 1, fp);
fwrite(parr, sizeof(int), n, fp);
fclose(fp);
free(parr);
}
{
FILE * fp = fopen("binary_file", "rb");
double d;
int n = 0;
fread(&d, sizeof(d), 1, fp);
fread(&n, sizeof(n), 1, fp);
int * parr = (int *)malloc(sizeof(int) * n);
if (!parr) exit(1);
fread(parr, sizeof(int), n, fp);
for (int i = 0; i < n; i++)
printf("%d ", *(parr + i));
printf("\n");
}
return 0;
}