inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

13.5 바이너리 파일 입출력

(10:57) 바이너리 함수의 데이터 내용

해결된 질문

423

픽린

작성한 질문수 22

0




안녕하세요. 강의 13.5 10: 57 부근에 대한 질문입니다.
교수님께서 강의를 진행하시는 대로 그대로 코드를 작성하고 실행하였으나,
0부터 144짜지 2의 간격으로 깔끔하게 출력되던 교수님의 결과창과 달리 제 출력 결과는 마치 주소값을 나타내듯 불규칙한 -값의 연속, 그리고 중간중간 0과 정수 등이 섞여있는 결과를 보여주었습니다.

바이너리 파일이 2진 데이터 그대로의 파일이기 때문에, 파일 내부에 어떠한 값이 들어있을지는 출력해보기 전까지 모르고
또 출력되더라도 다른 컴퓨터의 결과와 완전히 동일한 결과가 출력되지 않을 수 있는 것이 정상인가요?

혹시 제가 코드를 잘못 작성했는지 비교해보았으나 그런 것 같지는 않습니다.

c

답변 1

1

강민철

코드를 다시 살펴보시겠어요?

실수가 될 법한 포인트들을 짚어드리자면,

 

  1. 우선 아래의 코드가 제대로 작성되었는지 확인해보세요. parr 안에 값이 잘 대입되었는지 디버깅해보시거나 printf로 확인해보셔도 좋습니다.

	for (int n = 0; n < 123; ++n) {
		*(parr + n) = n * 2;
		// printf("%d ", *(parr + n));
	}

 

  1. fwrite의 첫 번째 인자는 &parr가 아닌 parr입니다.

    	fwrite(&d, sizeof(d), 1, fp);
    	fwrite(&n, sizeof(n), 1, fp);
    	fwrite(parr, sizeof(int), n, fp);
  2. 아래와 같이 출력되었는지 확인해보세요.

	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;
}

Export template 안됨

1

45

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

71

3

main 함수에서 왜 int만 선언이 되는걸까요

1

63

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

62

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

59

1

프로토타입과 함수간의 인자 불일치

1

81

2

12.12 헤더 관련 질문

1

64

2

Visual Studio Community 2026 사용 문의

1

150

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

65

2

getchar(), putchar()

1

97

3

강의자리ㅛ

1

86

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

119

2

소스파일안에 여러 파일

1

81

2

F5와 F7의 차이

1

82

2

c = TWO * (a+b); 에서 a와 b는?

1

63

2

; 세미콜론을 붙이는 기준에 문의

1

73

1

Step over 기능 문의

1

57

2

2.6 강의 따옴표 출력 규칙 문의

1

81

2

int main 함수 관련 오류 문의

1

72

2

13.4 words[0]

0

64

2

11.7 함수를 구현해 봤습니다.

1

66

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

67

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

57

2

11.6 fit_str함수를 구현해 봤습니다.

1

56

2