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!가 출력되는 것입니다.