52.5 연습문제: 2차원 좌표 복제하기

다음 소스 코드를 완성하여 10 20이 출력되게 만드세요.

practice_struct_memory_copy.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Point2D {
    int x;
    int y;
};

int main()
{
    struct Point2D p1;
    struct Point2D *p2 = malloc(sizeof(struct Point2D));

    p1.x = 10;
    p1.y = 20;

    memcpy(________________________________);

    printf("%d %d\n", p2->x, p2->y);

    free(p2);

    return 0;
}

실행 결과

10 20

정답

p2, &p1, sizeof(struct Point2D)

해설

구조체 변수 p1의 멤버에만 10과 20을 저장했습니다. 그런데 printf로 출력할 때는 구조체 포인터 p2를 사용하고 있습니다. 따라서 p1의 내용을 p2로 복사해야 합니다.

memcpy 함수를 사용할 때 p1은 구조체 변수이므로 앞에 &를 사용하여 메모리 주소를 구해서 넣어주고, p2는 포인터이므로 그대로 넣습니다. 그리고 마지막에는 복사할 크기를 넣어야 하므로 구조체의 크기를 구해서 넣어주면 됩니다.