inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

바이너리 파일을 읽을 때 관련해서 질문 드립니다.

해결됨

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

안녕하세요. 13.5 강의를 듣고 실습 도중 궁금한 점이 있어서 질문 드립니다. 수업처럼 sample.txt 파일을 하나 만들고 나서 fread() 로 파일을 어떻게 읽는지 궁금해서 frwite() 로 쓸 때와 다른 순서로 fread() 를 해보았습니다. 그랬더니 순서를 맞췄을 때와 다른 결과가 나와서 관련되어 질문 드립니다. 우선 다음과 같이 코드를 작성했습니다. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main() { // FILE write { FILE* fp = fopen("sample.txt", "wb"); int n = 100; double d = 10.0; float f = 3.14f; int* parr = (int*)malloc(sizeof(int)*n); if (!parr) exit(1); for (int i = 0; i < n; ++i) *(parr + i) = i * 2; fwrite(&n, sizeof(n), 1, fp); fwrite(&d, sizeof(d), 1, fp); fwrite(&f, sizeof(f), 1, fp); fwrite(&parr, sizeof(parr), 1, fp); } // FILE read { FILE* fp = fopen("sample.txt", "rb"); int n = 0; double d = 0.0; float f = 0.0f; size_t c0 = fread(&n, sizeof(n), 1, fp); printf("n: %d\tcount:%d\n", n, c0); size_t c2 = fread(&f, sizeof(f), 1, fp); printf("f: %f\tcount:%d\n", f, c2); size_t c1 = fread(&d, sizeof(d), 1, fp); printf("d: %f\tcount:%d\n", d, c1); int* parr = (int*)malloc(sizeof(int) * n); if(!parr) exit(1); size_t c3 = fread(&parr, sizeof(int), n, fp); printf("parr: %d\tcount:%d\n", *parr, c3); printf("fepf: %d\n", feof(fp)); free(parr); fclose(fp); } } size_t c1 과 size_t c2 의 코드상 순서를 위와 같이 했을 때는 출력 결과가 다음과 같았습니다. 출력 결과 n: 100 count:1 f: 0.000000 count:1 d: 49.920021 count:1 parr: -842150451 count:100 feof: 1 size_t c1 과 size_t c2 의 코드상 순서를 뒤집어서 fwrite()을 했을 때와 동일하게 한 경우 출력 결과가 다음과 같았습니다. 출력 결과 n: 100 count:1 d: 10.000000 count:1 d: 3.140000 count:1 parr: -842150451 count:100 feof: 1 여기서 질문입니다. 파일을 fread()로 sample.txt 파일을 읽을 때마다 인자로 입력한 크기만큼 책 읽듯이 앞에서 부터 데이터를 읽어서 파일 쓰기 값과 다른 f와 d의 결과가 나온 것일까요? 바이너리 파일을 읽을 때 fwrite()한 데이터 순서 상관 없이 존재하면 읽을 수 있는 방법이 있을까요? 웬지 일반적인 방법으로는 안될 것 같은데 순서대로 읽을 수 밖에 없는 것일까요? 또한 바이너리 파일 안에 어떠한 데이터 타입 포함되어 있는지 알 수 있는 방법이 있을까요? *parr의 경우 printf()로 출력하면 0이 출력 될 것이라 생각했는데 비정상적인 값이 나와서 놀랐습니다. 여러 생각을 해보았으나 원인이 잘 떠오르지 않아 왜 이런 값이 나오는지 여쭙습니다. 수업 주제를 넘어서는 질문인 것 같은데, 교수님께서 중간에 언급하신 '바이너리 파일의 구조를 모르면 해킹과 같은 방법으로 데이터를 읽어야 한다'고 하는게 상상을 해보면, 처음 부분부터 순차적으로 맞는 데이터를 찾을 때까지 (예를 들면) fread()를 반복해서 실행해 값을 확인하고 다음 데이터로 넘어가고를 반복하는 것일까요?

  • c
Lucas 댓글 2 좋아요 1 조회수 64

if(!parr) exit(1); 을 하는 이유에 대해 질문 드립니다.

해결됨

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

안녕하세요. 13.5 강의를 듣고 실습 중에 궁금증이 생겨 질문 드립니다. FILE* fp = fopen("sample.txt", "rb"); int n = 100; int* parr = (int*)malloc(sizeof(int)*n); for (int i = 0; i < n; ++i) *(parr + i) = i * 2; 위와 같이 if(!parr) exit(1); 부분을 빼놓고 코드를 작성하니 "NULL 포인터 parr+i 를 역참조 할 수 없다"고 MSVS에서 표기가 뜹니다. exit(1) 은 프로그램을 종료 시키는 것으로 알고 있었는데 동적할당 메모리 parr 이 처음 선언될 때 할당된 메모리의 첫 번째 주소를 리턴 받은게 아니라 NULL 로 리턴을 받을 수 있는 가능성이 있어서 MSVS에서 미리 경고를 주는 것일까요? 코드 실행 자체는 잘됩니다.

  • c
Lucas 댓글 1 좋아요 1 조회수 53

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

해결됨

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

#define CRT SECURE_NO_WARNINGS #include <stdio.h> /* 10 10 / 2 = 5, remainder = 0 5 / 2 = 2, reminder = 1 2 / 2 = 1, reminder = 0 1 / 2 = 0, reminder = 1 */ void print_binary(unsigned long n); void print_binary_loop(unsigned long n); int main() { unsigned long num = 10; print_binary_loop(num); printf("\n"); print_binary(num); printf("\n"); return 0; } void print_binary(unsigned long n) { if (n > 0) { print_binary(n / 2); printf("%d", n % 2); } } void print_binary_loop(unsigned long n) { int i = 0, remain, v; for (int ans = n; ans > 0; ans = ans / 2) { //printf("ans : %d\n", ans); i++; } for (int j = 0; j < i; j++) { v = n; for (int k = i; k > j; k--) { remain = v % 2; v = v / 2; } printf("%d", remain); } }

  • c
wjdwn535 댓글 2 좋아요 1 조회수 59

56강 bcm2835-mailbox.c 파일 질문

해결됨

한국에서 제일 쉬운 리눅스 커널 강의

빌드를 해보던 도중 printk("dev_id:0x%x \n", (unsigned int)action->dev_id); 해당 줄에서 언사인드 인트가 포인터 인트 형 문제라고 하는데 printk("dev_id:%p\n", action->dev_id); 이렇게 바꿔서 진행해도 될까요? 아니면 워닝 무시하고 해보면 되나요?

  • c
  • linux
  • Raspberry-Pi
  • 운영체제
  • arm-architecture
  • asm
이양배 댓글 2 좋아요 0 조회수 91

26년 실기

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

이 강의로 26년 실기 준비가능할까요?

  • python
  • java
  • c
  • 정보처리기사
경준 댓글 2 좋아요 0 조회수 319

11.2 24분2초

해결됨

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

여기서 헤드 포인터가 가리키는 데이터가 텍스트 세그먼트에 있기떄문에, 텍스트 세그먼트에 있는 데이터들은 프로그램이 만들어질떄 프로그램 파일에 포함이 되기 떄문에 수정이 불가능하다고 하셨는데, 그 이전에 문자열은 읽기 전용 데이타 세그먼트에 저장된다고 하셨는데, 왜 24분2초쯤에선 읽기전용 데이터 세그먼트가 아닌 텍스트 세그먼트에 저장된다고 하시는지 이유가 궁금합니다. 위 표의 프로그램 코드가 읽기 전용 데이터 세그먼트도 포함하는거라고 보면 될까요?

  • c
luki 댓글 1 좋아요 1 조회수 43

stdin, stdout

해결됨

독하게 시작하는 C 프로그래밍

stdin과 stdout이 콘솔 장치 파일을 가리키는 포인터면 Windows에서는 CONIN CONOUT$을 가리키는 건가요?

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
skyboy 댓글 2 좋아요 0 조회수 88

마지막 열의 노드를 삭제하였을때 읽기 엑세스 위반 발생 건

해결됨

독하게 C를 배운 사람을 위한 선형 자료구조

안녕하십니까 '더미 헤드를 갖는 리스트로 개선 및 검증' 학습하던 도중에, 마지막 노드인 'jang'을 삭제할 시에 읽기 엑세스 위반 오류가 뜨면서 정상적인 종료가 되지 않았습니다. 디버깅으로 살펴보니 pPrev->pNext도 마지막 노드이다 보니 NULL인 상태에서 pPrev->pNext 도 동일하게 NULL 인상태에서 발생한 문제인듯 합니다. 제생각에는 마지막 노드를 삭제할때는 pPrev->pNext NULL 경우에 대한 IF 절을 넣는게 맞아보이는데 맞는 조치일까요?

  • c
  • 코딩-테스트
  • 알고리즘
  • vc++
giup gun 댓글 2 좋아요 0 조회수 92

필수 실습 (최댓값을 반환하는 함수)

해결됨

독하게 시작하는 C 프로그래밍

안녕하세요 선생님 코드는 잘 돌아가는데 혹시 부족한 사항이 있는지 궁금하여 글 올려봅니다 강의 정말 잘 보고 있습니다 감사합니다

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
skyboy 댓글 2 좋아요 0 조회수 112

아......ㅠㅠ

해결됨

독하게 시작하는 C 프로그래밍

필기하는 소리가 왜 이렇게 크게 녹음이 되어 있는건지... 이해가 안가네요. 선생님 목소리 듣는데 너무 방해가 되요 ㅠ 미치겠네요 ㅎㅎ 이미 녹음된거 바꿀수도 없고, 스피커 볼륨을 최소로 해놓고 들어보겠습니다

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
꿈냥이 댓글 2 좋아요 0 조회수 127

1강이 안나오네요?

미해결

C언어 슈팅게임 따라만들기

1강 영상이 안나오네요?

  • c
꿈냥이 댓글 2 좋아요 0 조회수 88

1.13 gcc main.c 실행파일이 안만들어집니다

미해결

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

다른분들이 남겨주신 글을보고 저장한 후에도 해봤지만 이렇게만 나오고 실행파일은 만들어지지 않습니다 어떻게 해야할까요 PS C:\hjm c files> gcc main.c main.c:1:10: fatal error: studio.h: No such file or directory 1 | #include <stdio.h> | ^~~~~~~~~~ compilation terminated.

  • c
댓글 2 좋아요 1 조회수 80

'drivers/soc/bcm/bcm2835-power.o 에러 입니다.

해결됨

한국에서 제일 쉬운 리눅스 커널 강의

실수방지 드라이버 만들기-1 10:00에서 'drivers/soc/bcm/bcm2835-power.o 가 찾을수 없다고 나오는데 보니까 bcm2835-power.c, raspberrypi-power.c 파일은 저폴더에 없던데 어디서 나오는건가요?

  • c
  • linux
  • Raspberry-Pi
  • 운영체제
  • arm-architecture
  • asm
이양배 댓글 3 좋아요 0 조회수 118

버퍼 내 엔터

해결됨

독하게 시작하는 C 프로그래밍

제 컴퓨터에선 스캔시 엔터를 누르면 메모리에서 0a라고 뜨지않고 그냥 00이라고 뜨는데 차이가 있는 건가요?

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
skyboy 댓글 1 좋아요 0 조회수 97

char cookies[1] = {'A',} 가 이해가 안되서 질문드립니다.

해결됨

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

안녕하세요. char cookies[1] = {'A',}; 위 코드에서 이해가 안되는 점입니다. 문자 배열은 NULL 문자까지 포함해서 크기가 2여야 하는게 아닌지요? 위 배열 처럼 크기가 1인 경우 &cookies 주소의 바로 다음 주소가 NULL이되는 건지? (NULL은 어디에?) 이를 확인해 보기 위해 printf("%c\n", *(&cookies[0]+1)); 을 해보았으나 ? 가 출력되더라고요 다른 질문을 보니 , (콤마)의 경우 자동으로 NULL문자를 만들어 주기 위함으로 붙이는데 크기가 1인 배열에도 붙여 줘야 하는건지 궁금합니다.

  • c
Lucas 댓글 2 좋아요 1 조회수 67

정보처리기사 실기 | 25년 3회 기출문제 코드부분 1편 관련

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

안녕하세요, 강사님. 매번 빠르게 기출 분석 및 해설 강좌 업로드 해주심에 대단히 감사드립니다!!! 😄 글 제목과 관련된 위의 영상에서 말씀해주셨습니다만, 아직 인프런 강의 목록에서는 확인을 하지 못하여서요... 2편은 포함하여, 강의 업로드 계획을 문의드리고자 글 남깁니다. 항상 고생 많으십니다 ㅜㅜ 감사합니다.

  • python
  • java
  • c
  • 정보처리기사
Hu Young Lee 댓글 1 좋아요 0 조회수 273

17분경 제가 이해한게 맞는지 확인 부탁드립니다.

해결됨

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

17분 경에 나오는 다음 코드에 대해 제가 올바르게 이해 한 것인지 궁금해서 질문 드립니다. // 강의 17분 경 코드 const int** pp2; int* p1; const int n = 13; pp2 = &p1; *pp2 = &n; *p1 = 10; 제가 이해한 부분들입니다. 애초에 포인터 변수 p1 이 const 포인터 변수가 아닌데 이중포인터 변수 pp2 에 대입이 된 부분부터 일단 잘못 되었다. *pp2 = &n 은 *p1 = &n 과 동일하다. p1은 const 포인터 변수가 아닌데 const 변수 n의 주소가 대입되어 p1이 n의 값을 변경할 수 있게 되었다. 질문입니다. 포인터 변수에서 const가 데이터 타입 왼쪽에 있으면 indirection을 하지 못하게 방지 하는 역할로 알고 있는데 *pp2 = &n 이 어떻게 경고 없이 컴파일 된건지 궁금합니다. const 데이터 변수의 주소를 대입해서 그런걸까요?

  • c
Lucas 댓글 1 좋아요 1 조회수 77

42:22

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

-1 에서 "" 을 반환하고 0번째로 올라가서 a를 반환하는것 까진 이해했습니다. 근데왜 abcd가 아니라 거꾸로 축력이 되는거죠

  • python
  • java
  • c
  • 정보처리기사
김성태 댓글 2 좋아요 0 조회수 89

60강 빈칸채우기 11:31

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

이 문제에서 int 형태로 input에 101110이들어가면 10진수 10만1110으로 인식하지 않나요..? 설명이 조금더 있었으면 좋겠습니다 어떻게 이 프로그램이 2진수로 인식을 하나요?

  • python
  • java
  • c
  • 정보처리기사
pmg4289 댓글 2 좋아요 0 조회수 83

인기 태그

인프런 TOP Writers

주간 인기글