2007/07/24

A Book On C Chapter 6 연습문제 6번.

다음 프로그램은 %p 형식을 사용하여 어떤 주소들을 출력한다.

#include

int main(void)
{
int a = 1, b = 2, c = 3;
printf("%s%p \n%s%p \n%s%p \n",
"&a = ", &a,
"&b = ", &b,
"&c = ", &c);

return 0;
}

변수 a, b, c가 초기화되지 않았다면, 프로그램은 동일한 결과를 출력하겠는가?
%p를 %d로 수정하면, 어떻게 되겠는가? 컴파일러는 오류 메시지를 출력하겠는가?
가능하다면, 프로그램을 MS-DOS 시스템에서 실행해 보아라. 포인터는 4바이트이고 int는 2바이트이기 때문에, %d 형식은 적절하지 않을 것이고, 음수 값이 출력되는 원인일 수 있다.


실행결과
&a = 0x22cce4
&b = 0x22cce0
&c = 0x22ccdc
변수 a, b, c가 초기화되지 않더라도 동일함

%p를 %d로 수정해도 warnning이나 error은 발생하지 않음. MS-DOS 깔린 시스템이 요새 어딧나
확실히 %d 형식에선 오버플로/언더플로가 발생할 가능성도 있을것 같다.

댓글 없음:

댓글 쓰기