inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

4.9 printf() 함수가 인자들을 해석하는 과정

4.9 그냥 첫번째 n1은 메모리 읽기의 문제가 아니라 그냥 형식 지정자를 일치 시키지 않아서 문제가 아닌가요?

349

매화수

작성한 질문수 1

2

4.9 강의 질문입니다.

#include <stdio.h>

int main()

{

float n1 = 3.14f; // 4bytes double

n2 = 1.234;

int n3 = 1024;

printf(”%d %d %d\n”, n1, n2, n3);

}

printf는 float를 double을 변환시킨다고 하셨는데. 만약에 float를 강제로 4byte를 가지게 하게 했을 때, 어떤 식으로 나오는 지 출력을 해봤습니다.

그럼에도 불구하고 쓰레기값으로 나오더군요.

그러면 그냥 첫번째 n1은 메모리 읽기의 문제가 아니라 그냥 형식 지정자를 일치 시키지 않아서 문제가 아닌가요?

특히

printf(”%lld %lld %d\n\n”, n1, n2, n3); 에서도

메모리의 크기를 맞춰주어도 쓰레기 값을 출력해준 것을 보면..

// 제 컴퓨터에서는

printf("%f %d %d\n\n", n1 ,n2 ,n3) // O X X }

가 O X O로 제대로 출력이 됩니다..

파일명도 .c로 끝나는데..

8분 강의에 제가 이해가 안되서 2시간을 쏟고 있어요.. 뭔가 머리가 아픕니다..

c

답변 1

2

Soobak

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

%lld 를 사용하셨을 때 메모리 크기는 일치하지만, 자료형이 일치하지 않기 때문에 메모리의 데이터를 잘못 해석하여 기대와 다른 값이 출력되는 것입니다.

즉, 형식 지정자의 사용에 있어서는 메모리의 크기 뿐만 아니라 자료형에 대한 부분도 고려해야 합니다.

특히, 부동소수점 형식과 정수형 의 데이터는, 데이터를 숫자로 표현하는 방법이 다르기 때문에 잘못된 값이 출력되게 됩니다.

 

예를 들어, 메모리 크기를 일치시키기 위해서 %lld 형식 지정자를 사용하셨을 때는 long long int 자료형을 기대하지만, n1n2 는 부동 소수점 형식이므로, 해석 과정이 잘못되어 기대와 다른 값을 출력하게 됩니다.

%f 형식 지정자를 사용하셨을 때는 잘 출력이 되셨다고 해주신 부분을 생각해보시면 이해에 도움이 되실 것 같습니다.

 

해당 강의의 큰 맥락은 printf() 함수 사용에 있어서 인수가 해석되는 과정을 설명으로(메모리 관점 및 자료형 관점) 올바른 형식 지정자의 사용에 대한 중요성을 배우는 것이라는 점을 염두 해두시면 이해가 좀 더 수월하실 것 같습니다.

1

매화수

답변 감사합니다

Export template 안됨

1

36

2

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

1

59

3

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

1

58

2

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

1

56

2

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

1

50

1

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

1

74

2

12.12 헤더 관련 질문

1

61

2

Visual Studio Community 2026 사용 문의

1

140

2

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

1

62

2

getchar(), putchar()

1

95

3

강의자리ㅛ

1

81

2

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

1

115

2

소스파일안에 여러 파일

1

77

2

F5와 F7의 차이

1

80

2

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

1

61

2

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

1

71

1

Step over 기능 문의

1

55

2

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

1

78

2

int main 함수 관련 오류 문의

1

70

2

13.4 words[0]

0

62

2

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

1

63

2

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

1

66

2

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

1

54

2

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

1

55

2