-
💡 [C언어] memcpy 함수 설명 및 다양한 예시| 프로그래밍 분야/C 2021. 5. 4. 14:31
💡 man memcpy
NAME
memcpy -- copy memory area
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <string.h>
void *
memcpy(void *restrict dst, const void *restrict src, size_t n);
DESCRIPTION
The memcpy() function copies n bytes from memory area src to memory area dst. If dst
and src overlap, behavior is undefined. Applications in which dst and src might overlap
should use memmove(3) instead.
RETURN VALUES
The memcpy() function returns the original value of dst.
SEE ALSO
bcopy(3), memccpy(3), memmove(3), strcpy(3), wmemcpy(3)
STANDARDS
The memcpy() function conforms to ISO/IEC 9899:1990 (``ISO C90'').memcpy()
함수는string.h
에 정의되어 있으며, 소스 주소의 값을 정해준 크기만큼 참조하여 목적 주소에 복사(copy)하는 함수이다.void *memcpy(void *restrict dst, const void *restrict src, size_t n);
dst : 목적 주소
src : 소스 주소
n : 복사할 데이터 크기(바이트 단위)
리턴값은 dst의 주솟값이다.
size_t 에 관한 포스팅)
💡 테스트케이스
12345678910111213141516171819202122232425262728293031<<TEST ~ memcpy>>---------- memcpy(str, str1, 8)Original : [str] Hello World![str1] Hello !!!!!!Result : [str] Hello !!rld!---------- memcpy(str, str1, 4)Original : [str] Hello World![str1] WowResult : [str] Wow---------- memcpy(list, list1, sizeof(list1))Original : [list] {0, 1, 2, 3, 4, 5, 6, 7}[list1] {0, 1, 2, 42, 4, 5, 6, 24}Result : {0, 1, 2, 42, 4, 5, 6, 24}---------- memcpy(list, list1, sizeof(int) * 4)Original : [list] {0, 1, 2, 3, 4, 5, 6, 7}[list1] {0, 1, 2, 42, 4, 5, 6, 24}Result : {0, 1, 2, 42, 4, 5, 6, 7}---------- memcpy(list, list1, sizeof(int) * 4 - 3)Original : [list] {0, 1, 2, 3, 4, 5, 6, 7}[list1] {0, 1, 2, 1042, 4, 5, 6, 24}Result : {0, 1, 2, 18, 4, 5, 6, 7}cs 💡 예외 상황
복사받는 주소의 범위와 소스 주소의 범위가 겹치면 안된다. 그런 경우
memmove()
를 이용해줘야한다. 요즘은 실행은 잘 된다고 하던데...