C Func memcpy - sonkoni/Koni-Wiki GitHub Wiki

string.h

memcpy

메모리 블록을 입력된 크기만큼 복사한다.

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;
}
⚠️ **GitHub.com Fallback** ⚠️