반응형
memcpy란
특정 메모리를 다뤄 복사하는 함수이다. 헤더 파일을 보면 문자열 관련 함수로 보일 수 있으나 그것보다 더 범용성이 넓다. memory copy의 약자이며 지정한 메모리의 내용을 다른 곳으로 복사하기 위해 사용한다. 깊은 복사를 사용하여 복사를 진행한다.
기본 함수 및 인자
void* memcpy(void* dst, void* src, size_t num)
string.h 헤더 파일을 포함해야 하며 memory.h에도 정의되어있다. c++에서는 <cstring> 헤더 파일을 포함하면 된다.
- dst : 복사받는 메모리를 가리키는 포인터
- src : 복사하려는 원은 메로리를 가리키는 포인터
- num : 복사할 바이트 수
성공 시 dst 포인터를 반환하며 실패 시 NULL을 반환한다.
memcpy 함수 사용
memcpy 함수는 특정한 메모리를 복사하기 위해 사용된다. memmove와 동작은 유사하나 버퍼를 사용하지 않는 점 때문에 memcpy는 메모리가 상호 배제되어야 한다. 전혀 다른 메모리 공간에 똑같은 데이터 복사를 수행한다. 메모리를 직접 다루기 때문에 사용자 정의 자료형을 포함한 자료형에 대한 이해뿐만 아니라 그 안에 어떠한 메모리가 배치되어 있는지 어느 정도 파악해야 한다. 자칫 버그나 오류로 이어질 수 있어 주의해야 한다.
memcpy 함수 예제
#include <string.h>
#include <stdio.h>
int main(){
char ab[20]="hello";
char aa[20];
printf("%s\n",ab);
printf("%s\n",aa);
memcpy(aa,ab,5*sizeof(char));
printf("%s\n",aa);
}
ab를 aa에 복사하는 예제이다. char크기만큼 5번의 크기 즉 5byte를 복사하는 예제이다.
#include <string.h>
#include <stdio.h>
int main(){
char ab[20]="hello";
char aa[20];
printf("%s\n",ab);
printf("%s\n",aa);
memcpy(aa,ab,5*sizeof(char));
printf("%s\n",aa);
memcpy(aa,ab,6*sizeof(char));
printf("%s\n",aa);
return 0;
}
몇 줄의 코드를 수정한 예제의 결과이다. 단지 1byte를 크게 했을 뿐인데 hello까지만 출력되었다. ab변수의 \0까지 복사가 되어 다음처럼 hello만 복사가 된 것이다. 앞서 말했던 것처럼 메모리를 유의하면서 코드를 짜야하는 이유가 다음과 같다. 5, 6의 차이는 전혀 다른 결과를 보여준다.
728x90
반응형
'Programming > C C++' 카테고리의 다른 글
C/C++ memset() 함수 (0) | 2021.07.11 |
---|---|
Segmentation Fault 세그멘테이션 오류 (Core dump) (0) | 2021.07.05 |
스레드와 C언어 스레드 pthread (0) | 2021.06.19 |
C++ STL map 컨테이너 (2) | 2021.06.09 |
C++ STL Set 컨테이너,멤버 함수 사용 (2) | 2021.06.05 |
댓글