반응형
함수 원형
void* memcpy (void* dest, const void* src, size_t num)
• dest: 데이터가 복사될 곳 (void* 형)
• src: 복사될 데이터가 위치하는 곳 (void* 형)
• num: 복사할 크기 (byte 단위)
→ src 에 있는 영역에서 num 바이트 만큼 dest 영역으로 옮긴다.
중간에 버퍼를 이용하기 때문에 메모리를 옮길 때
dest 영역과 src 영역이 겹처도 문제가 없다.
→ dest 영역과 src 영역 크기는 num 이상이어야 한다.
→ 필요한 헤더 파일: <string.h> 혹은 <memory.h>
반환 값
dest (void* 형)
예제 (정수 배열 복사)
#include <string.h>
#include <stdio.h>
int main()
{
int src[2][3] = { {1, 2, 3},
{4, 5, 6}};
int dest[2][3] = {};
memmove(dest, src, sizeof(src));
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 3; ++j)
{
printf("%d ", dest[i][j]);
}
puts("");
}
}
예제 (문자열 복사)
#include <string.h>
#include <stdio.h>
int main()
{
char src[4] = "aaa";
char dest1[6] = "bbbbb";
char dest2[6] = "bbbbb";
// 1. {src 길이}만 복사
memmove(dest1, src, sizeof(char) * 3);
// 2. {src 길이 + 1} 만큼 복사
// sizeof(src)과 크기 동일
memmove(dest2, src, sizeof(char) * 3 + 1);
printf("dest1 = %s\n", dest1);
printf("dest2 = %s\n", dest2);
}
memcpy와 마찬가지로 문자열 복사시에는
끝 문자 「\0」 에 유의해야 한다.
memcpy() vs memmove()
메모리에 있는 값을 복사한다는 점에서는
memcpy의 목적과 비슷하다고 볼 수 있다.
memmove는 중간에 버퍼를 이용하기 때문에
메모리 영역이 겹처도 된다 차이점이 있다. → 안정성
이로인해 성능상 memcpy 보다 떨어진다.
📌 함께 보면 좋은 포스팅
반응형
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C/C++] #ifdef, #if defined() 비교 및 활용 (0) | 2022.09.01 |
---|---|
[C 전처리기] #error 활용 예제 (0) | 2022.08.11 |
[C/C++] memcpy 사용 방법 (0) | 2021.11.24 |
[C/C++] do-while 문 형태와 활용 (0) | 2021.11.22 |
[C] printf 서식 (0) | 2021.09.14 |
댓글