#include <stdio.h> int main(void) { int ten = 10; printf("%d,%d,%d\n", ten, 2, ten-2); printf("%d,%d,%d\n", ten); return 0; }
하면 결과는
10,2,8 10,10,6618680
이런식으로 나와야 정상일텐데 저의 출력결과는
10,2,8 10,2,8
입니다...왜이렇죠?;;
printf와 같은 함수에서 인자와 포맷 스트링의 수가 서로 일치하지 않는 경우의 행동은 보장할 수 없습니다. 즉 위와 같은 경우 어떤 출력값이 나오는지 아무도 알 수 없으며 절대 사용해서는 안되는 형태입니다.
굳이 밑과 같은 형태로 나오는 이유를 살펴보자면 함수 호출시 스택에 인자를 쌓게 되는데 두번째 호출을 할때 첫번째 호출한 함수의 인자가 스택에 그대로 남아 있어서 그런 것입니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
printf와 같은 함수에서 인자와 포맷 스트링의 수가 서로 일치하지 않
printf와 같은 함수에서 인자와 포맷 스트링의 수가 서로 일치하지 않는 경우의 행동은 보장할 수 없습니다. 즉 위와 같은 경우 어떤 출력값이 나오는지 아무도 알 수 없으며 절대 사용해서는 안되는 형태입니다.
굳이 밑과 같은 형태로 나오는 이유를 살펴보자면 함수 호출시 스택에 인자를 쌓게 되는데 두번째 호출을 할때 첫번째 호출한 함수의 인자가 스택에 그대로 남아 있어서 그런 것입니다.
댓글 달기