프로그래밍

 3198, 1/160 회원가입  로그인  
   cdpython
   [c언어] 포인터 질문입니다.

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


bof를 공부하려고 책을 열심히 보다가 포인터에서 궁금한게 생겨서 질문드려요.
우선 소스는 아래와 같습니다.

#include <stdio.h>
#include <string.h>

int mian(){
    char str_a[20];
    char *pointer;
    char *pointer2;

    strcpy(str_a, "Hello world!\n");
    pointer=str_a;
    printf(pointer);


    pointer2=pointer+2;
    printf(pointer2);
    strcpy(pointer2, "y you guys!\n");
    printf(pointer);
}


우선 str_a에 hellow world! 를 복사하고
pointer에 str_a의 시작점 주소를 넣고
출력을 합니다.
Hello world! 가 출력이 됩니다.

두번째로 pointer2 에 시작점은 pointer+2 입니다.
pointer 는 char형 이니까 2바이트 더 뒤로 간
llo world! 가 출력됩니다.

다음으로 pointer2에 y you guys!를 복사합니다.
마지막으로  pointer 를 출력합니다.

그런데 출력이 hey you guys! 라고 나오는데
마지막 부분이 이해가 잘 안됩니다!!

pointer의 시작점은 str_a의 시작 주소 아닌가요?
그러면 제가 생각할땐 hello world! 가 나와야하는데
그렇지가 않네요;

설명좀 부탁드립니다!

  Hit : 6057     Date : 2011/08/07 04:05



    
Pang 저 같은경우 strcpy(pointer2, "y you guys!\n"); 이 라인을 포함해서 코딩을 하면 컴파일에 오류가 나고

저 라인을 빼면 정상적으로 hello world!가 출력되더군요 아마 pointer2=pointer+2 를하면서 리턴어드레

스를 밀어버린게 아닐까요?

ps:저는 아직 c언어도 아직 다 때지못한 학생으로 그냥 저의 생각을 적어본거니 그냥 참고만 하세요 ^^
2011/08/07  
릴라고 주소를 가지고 하는것이기 때문에 그렇습니다.
pointer , str_a 시작 주소가 40000이라고 가정해봅시다.
Hello world!가 40000번지 주소부터 40001번지 40002번지 40003번지....해서 쭉
들어가 있겠지요.
거기서 pointer2에다가 pointer시작주소 40000번지에 2를 더한주소,
즉 40002번 주소를 저장하였고 그 주소부터 y you guys!를 카피했습니다.
pointer는 여전히 40000번지를 가르키고있고, 40000번지,40001번지 값을 여전히
He로 똑같지만 40002번지부터는 아까 카피를했으므로 값이 달라지지요.
그래서 Hey you guys!가 출력되는 것입니다.
2011/08/07  
cdpython 릴라고님 감사합니다!!! 완전 잘 이해되네요 ^^ 2011/08/07