헤더 파일
<string.h>
사용 목적
memcpy
헤더 파일 사용 목적 메모리 B를 특정 길이(byte 단위) 만큼 메모리 A에 복사한다. 프로토타입과 매개변수 void *memcpy(void *dest, const void *src, size_t n); 1. void *dest : src를 복사해서 넣고자 하는 주..
hasensprung.tistory.com
memcpy와 같은 기능을 수행하지만, 따로 버퍼를 만들어서 그곳에 저장한 후 옮기는 과정을 거치기 때문에 메모리가 중첩되는 것을 방지할 수 있다.
예를 들어,
memcpy(str + 1, str, 10);
의 경우에는 str이 온전히 옮겨질 수 없다. (한번 그려보며 이해하면 편할 것이다.) 하지만 memmove에서는 중첩과 상관없이 온전하게 메모리를 복사하는 것이 가능하다.
프로토타입과 매개변수
void memmove(void *dest, void *src, size_t n);
1. void *dest = 복사해서 붙일 주소
2. void *src = n만큼 복사할 주소
3. size_t n = 복사할 크기 (byte 단위)
반환값
dest의 첫 주소값
함수의 원리
이해를 돕기 위해 같은 동작을 하는 함수를 만든 것입니다.
void *ft_memmove(void *dest, void *src, size_t n)
{
if (src < dest && dest < src + n) //dest주소값이 src주소값 범위 내에 위치할 경우
{
while (n > 0)
{
n--;
((char*)dest)[n] = ((char*)src)[n]; // 복사를 뒤에서부터 진행한다. (앞에서부터 하면 겹치는 부분이 생김)
}
return (dest + n); // dest 주소값을 반환(n은 0이다)
}
return (ft_memcpy(dest, src, n)); // 주소값 상관관계가 없을 경우 그냥 복사
}
사용 예시
#include <string.h>
#include <stdio.h>
int main(void)
{
char src[] = "Life is FortyTwo";
char dest[30];
memmove (dest, src, (strlen(src) + 1)); //NULL값까지 복사하고 싶어서 1을 더해줌
printf ("%s\n", dest);
return (0);
}
Life is FortyTwo
'C언어 > 함수' 카테고리의 다른 글
memset (0) | 2020.09.25 |
---|---|
memccpy (0) | 2020.08.10 |
memcpy (0) | 2020.08.10 |
memchr (0) | 2020.08.10 |
memcmp (0) | 2020.08.10 |
strlen (0) | 2020.08.10 |