[42seoul] memcpy는 어떤 함수일까?

개발하는 곰댕이·2021년 4월 9일
0

42Seoul

목록 보기
17/45
  • include

#include <string.h>
void *memcpy(void *dest, const void *src, size_t n);
  • 인자

    • dest
      복사가 진행될 목적지이다. void * 의 형태로 string뿐 아니라 다른 값도 들어올 수 있다.
    • src
      우리가 복사를 해야하는 값이 들어있는 포인터이다.
    • n
      src에서부터 n byte만큼 dest에 복사를 한다.

1. memcpy란?

memcpy는 매개변수로 들어온 srcn byte만큼 dest에 복사하는 함수이다. 이 함수는 strlcpy와 동일하게 동작하기는 하지만 다른 mem함수와 str함수의 차이점과 같이 '\0'값을 확인하지 않고 정확히 n만큼만 복사가 이루어진다. 그렇다는 이야기는 mem함수는 문자열의 값만 주고 받지 않는다는 이야기가 될 수 있다.

2. 사용 예제

예를 들어서 서로다른 두 구조체를 복사 해야 한다고 생각해 보자.

이런 식으로 원하는 값 만큼 복사를 진행할 수 있다.

이렇게 편하게 복사를 해 주지만 단점이 있다. 만약 두 변수의 메모리가 겹쳐져 있는 상태라면??

이런 상태를 Overlap이라고 한다. 이 상태에서 dest < src라면 큰 문제는 발생하지 않을 것이다. 하지만 dest > src라면??

이런 식으로 되어 있을 때 복사가 이루어 진다면

src의 0x6번의 값에 덮어씌워져 버리게 된다.이렇게 되면 결국에는

이런 값이 되어 버릴거다. 이런 상황을 방지하고자 memmove가 있는 것이다.

3. 리턴 값

복사된 dest를 리턴해 준다.

0개의 댓글