프로그래밍

 3198, 1/160 회원가입  로그인  
   zx4564
   28의 차이

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6405 [복사]


#include <stdio.h>
#include <string.h>
int main(void)
{
        char a[20],b[20],c[20],d[20];
        char e[80]="",*r[4],p[20];
        int k=0,l;
        fputs("Input : ",stdout);
        *r=gets(a);
        fputs("Input : ",stdout);
        *(r+1)=gets(b);
        fputs("Input : ",stdout);
        *(r+2)=gets(c);
        fputs("Input : ",stdout);
        *(r+3)=gets(d);

        printf("%d\n%d\n%d",*(r+k),*(r+k+1),*(r+k+2));
}

이것을 그대로 실행하면 28씩 줄어드는 숫자가 나옵니다
그 숫자는 무엇이고 왜28씩 줄어드나요
주소값도 따로 있던데


  Hit : 5101     Date : 2013/11/13 09:58



    
hch19860906 우선 이건 멀하는 코드나요?
*r, *(r+1), *(r+2), *(r+3)에 문자열 을 넣고 이 주소들로부터 4바이트를 읽어서 integer값으로 출력했으니 메모리에 있는 4byte값이 정수로 출력됩니다... 이 수자는 무슨 28과 상관이 없고 메모리에 있는 값을 출력하기때문에 그저 네바이트 정수값이 표시될거예요....
2013/11/21  
sohun5013 printf("%d\t%d\n", *(r + k), a);
printf("%d\t%d\n", *(r + k + 1), b);
printf("%d\t%d\n", *(r + k + 2), c);
11139092 11139092
11139132 11139132
11139112 11139112
가 돼요. gets()가 받은 인자를 그대로 반환한다고 보면 되고요.
28이란 숫자는 컴파일러와 설정에 따라서 다를 수 있어요. a, b, c, d간의 주소 차인데 패딩이 있을 수도 있으니까요.
2014/01/24