반응형
목차
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가 작동 안하는 경우
- object가 중복되는 경우에는 함수가 정의되지 않는다.
src
혹은dest
가 invalid 하거나 null pointer이면 함수가 정의되지 않는다.**count
가 0인 경우**에도 기능이 정의 되지 않음- 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 |