C Func memcpy - sonkoni/Koni-Wiki GitHub Wiki
메모리 블록을 입력된 크기만큼 복사한다.
void* memcpy(void *restrict dest, const void *restrict src, size_t count);
// dest, src: 포인터
// count: 복사할 바이트 크기
// src포인터의 자료를 count 크기만큼 dest 로 복사한 뒤, dest 포인터를 반환한다.내부적으로는 소스의 메모리 블록과 타겟의 메모리 블록을 모두 unsigned char 배열로 해석, 소스코드의 메모리 블록을 1바이트 단위로 타겟에 count 크기만큼 복사한다.
메모리-to-메모리 복사의 가장 효율적인 방법이며 strcpy 보다 더 효율적이다.
#include <stdio.h>
#include <string.h> /* memset */
#include <stdlib.h> /* malloc, free */
struct Point2D {
int x, y;
};
int main(int argc, char *argv[]) {
struct Point2D p1 = {10, 20};
struct Point2D p2;
// 구조체 복사
memcpy(&p2, &p1, sizeof(struct Point2D)); // 인자가 포인터이므로 &를 통해 주소를 넣어준다.
printf("=> %d %d\n", p2.x, p2.y);
// => 10 20
// 구조체에서 구조체포인터로 복사
struct Point2D *p3 = malloc(sizeof(struct Point2D));
memcpy(p3, &p1, sizeof(struct Point2D));
printf("=> %d %d\n", p3->x, p3->y);
// => 10 20
// 구조체포인터에서 구조체포인터로 복사
struct Point2D *p4 = malloc(sizeof(struct Point2D));
memcpy(p4, p3, sizeof(struct Point2D));
printf("=> %d %d\n", p4->x, p4->y);
// => 10 20
free(p3);
free(p4);
return 0;
}