본문 바로가기
IT 톺아보기/이런저런 공부

memcpy 사용법

by 파초우 2023. 4. 18.
반응형

목차

memcpy()란?

memcpy() 는 “string.h”에 정의되어 있는 기능으로, 원하는 크기만큼 값을 다른 변수에 복사할 수 있는 함수이다.

#include <string.h>

void* memcpy(void* dest, const void* src, sizr_t count);

로 되어있고 내부에는 총 3개의 인자를 할당받는다.

할당 받는 각 인자는 아래와 같다.

`dest`는 우리가 복사를 받을 ptr이다.
`src`는 우리가 복사를 하려고 하는 ptr이다.
`count`는 복사할 인자의 크기이다.

쉽게 말해, src 에 저장되어 있는 값을 dest 에 복사하는데, count 크기만큼만 복사하는 것이다.

여기서 char 값을 복사한다고 가정하면 복사하려는 길이 + 1 만큼 해줘야한다. 그 이유로는 char를 복사할 때, NULL(\0)을 포함해야하기 때문이다.

memcpy() 사용 예시

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

int main(void) {

    char str[20] = "this is string";
    char dest[20];
    char dest1[20];
    char dest2;

    memcpy(dest, str, sizeof(char) * 20);
    printf("%s\n", dest); /* output is "this is string" */

    memcpy(dest1, str, sizeof(char) * 6);
    printf("%s\n", dest1); /* output is "this i" */

    memcpy(dest2, "this is memcpy", sizeof(char) * 20);
    printf("%s", dest2); /* output is "(null)" */

    return 0;
}

이런 식으로 code를 작성할 수 있는데, copy당할 변수 같은 경우에도, Array 길이를 지정해줘야 된다. 그리고 복사하려는 길이보다 작은 값으로 하게 된다면 우리가 지정한 길이까지만 복사를 진행하고 값을 반환해버린다. 마지막으로 길이를 지정을 안해주고 값을 복사하게 된다면, null 이 반환되거나 erre가 발생할 수 있다.

typedef struct {
    char name[20];
    int age;
} person;

person p1 = {"John Doe", 25};
person p2;

memcpy(&p2, &p1, sizeof(person));

이렇게 구조체를 복사할 수도 있다.

memcpy가 작동 안하는 경우

  1. object가 중복되는 경우에는 함수가 정의되지 않는다.
  2. src 혹은 destinvalid 하거나 null pointer이면 함수가 정의되지 않는다. **count 가 0인 경우**에도 기능이 정의 되지 않음
  3. obeject가 잠재적으로 중복되거나 복사불가능한 경우에도 정의되지 않는다.
반응형

'IT 톺아보기 > 이런저런 공부' 카테고리의 다른 글

memset 사용법  (0) 2023.04.20
CAN Message  (0) 2023.04.19
CAN 통신  (1) 2023.04.17
멀티 프로세스(Multi Process)란?  (0) 2023.02.01
한글 오토마타 만들기 - 3  (0) 2023.01.18