include
#include <string.h> void *memcpy(void *dest, const void *src, size_t n);
인자
- dest
복사가 진행될 목적지이다. void * 의 형태로 string뿐 아니라 다른 값도 들어올 수 있다.- src
우리가 복사를 해야하는 값이 들어있는 포인터이다.- n
src에서부터 n byte만큼 dest에 복사를 한다.
memcpy
는 매개변수로 들어온 src
를 n byte
만큼 dest
에 복사하는 함수이다. 이 함수는 strlcpy와 동일하게 동작하기는 하지만 다른 mem함수와 str함수의 차이점과 같이 '\0'값을 확인하지 않고 정확히 n만큼만 복사
가 이루어진다. 그렇다는 이야기는 mem함수는 문자열의 값만 주고 받지 않는다
는 이야기가 될 수 있다.
예를 들어서 서로다른 두 구조체를 복사 해야 한다고 생각해 보자.
이런 식으로 원하는 값 만큼 복사를 진행할 수 있다.
이렇게 편하게 복사를 해 주지만 단점이 있다. 만약 두 변수의 메모리가 겹쳐져 있는 상태라면??
이런 상태를 Overlap이라고 한다. 이 상태에서 dest < src
라면 큰 문제는 발생하지 않을 것이다. 하지만 dest > src
라면??
이런 식으로 되어 있을 때 복사가 이루어 진다면
src의 0x6번의 값에 덮어씌워져 버리게 된다.이렇게 되면 결국에는
이런 값이 되어 버릴거다. 이런 상황을 방지하고자 memmove가 있는 것이다.
복사된 dest를 리턴해 준다.