memmove함수..nasanjin 2007.10.30 07:06 |
답변 1 조회 1,086 |
---|
다음 예제는 src와 dest가 겹쳐 있지만 데이터가 파괴되지 않고 정상적으로 복사가 이루어진다. memmove를 memcpy로 바꾸어 보면 데이터가 파괴되어 복사가 원하는대로 되지 않는다.
#include <string.h>
#include <stdio.h>
int main()
{
char *src="last chrisrmas gave you my heart";
char *dest=src+5;
printf("before memmove : %s\n", src);
memmove(dest, src, 10);
printf("after memmove : %s\n", src);
return 0;
}
그런데 실행 오류나네요;;-_- 아무래도 겹쳐지는 듯....???????????
질문자 채택된 경우, 추가 답변 등록이 불가합니다.
re: memmove함수..francis__kim 2007.10.30 10:40 |
|
---|
프로그램을 컴파일하면 목적파일(object file)이 생성됩니다.
이 object file은 code segment와 data segment로 분리가 되는데... 간단히 설명하면
code segment는 프로그램 실행코드가 저장된 영역으로 일반적으로 고정된 크기이며 read only 속성을 가지게됩니다.
반면에 data segment는 사용자가 정의한 자료를 저장하는 영역으로 가변 영역으로 read/write가 가능합니다.
님께서 작성하신 코드의 src 변수 포인터 형으로 가리키고 있는 문자열은 컴파일러가 code 영역에 정보를 저장하게 됩니다.
따라서 read only영역의 정보를 변경하려고 하기 때문에 실행오류가 발생하게 되는 것입니다.
src 변수가 선언된 줄을 다음과 같이 고치면 뒤의 문자열이 data segment에 위치하게 되어 오류가 발생하지 않습니다.
char src[]="last chrisrmas gave you my heart";
도움이 되시길...