Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ memcpy() 함수 완벽 가이드: 개념, 문법, 예제 총정리

memcpy() 함수는 메모리 블록을 한 위치에서 다른 위치로 복사할 때 사용하는 표준 라이브러리 함수입니다. 복사 대상은 두 곳으로 나뉘는데, 하나는 소스(source), 다른 하나는 대상(destination)이며 각각 포인터로 지정합니다. 이 함수는 C 언어의 string.h 헤더 파일에 선언되어 있습니다.

특히 memcpy()는 복사 과정에서 오버플로우(overflow) 검사를 수행하지 않는다는 점에 유의해야 합니다. 따라서 개발자가 직접 대상 버퍼의 크기가 충분한지 확인해야 안전하게 사용할 수 있습니다.

memcpy() 함수의 문법

void *memcpy(void *dest_str, const void *src_str, size_t number);

각 매개변수의 의미는 다음과 같습니다.

  • dest_str − 복사된 데이터가 저장될 대상 배열을 가리키는 포인터입니다.
  • src_str − 복사할 원본 데이터가 있는 소스 배열을 가리키는 포인터입니다. const로 선언되어 있어 함수 내부에서 원본이 변경되지 않음을 보장합니다.
  • number − 소스에서 대상으로 복사할 바이트 수를 지정합니다.

함수는 작업이 성공하면 대상 포인터(dest_str)를 반환하며, 두 메모리 영역이 겹치는 경우(overlapping)에는 동작이 정의되어 있지 않으므로 이런 상황에서는 memmove()를 사용하는 것이 좋습니다.

memcpy() 사용 예제

#include <stdio.h>
#include <string.h>
int main () {
    char a[] = "Firststring";
    const char b[] = "Secondstring";
    memcpy(a, b, 5);
    printf("New arrays : %s\t%s", a, b);
    return 0;
}

실행 결과

New arrays : Seconstring	Secondstring

예제 코드 분석

위 프로그램에서는 char형 배열 두 개를 초기화한 후, memcpy() 함수를 호출하여 소스 문자열 b의 앞 5바이트를 대상 문자열 a로 복사하고 있습니다.

char a[] = "Firststring";
const char b[] = "Secondstring";
memcpy(a, b, 5);

복사가 실행되면 배열 a의 첫 5글자("First")가 b의 첫 5글자("Secon")로 교체되므로, 최종적으로 a는 "Seconstring"이 됩니다. 반면 원본 배열 b는 const로 보호되고 있기 때문에 그대로 유지됩니다.

이처럼 memcpy()는 문자열뿐 아니라 구조체, 배열 등 임의의 메모리 블록을 빠르게 복사해야 할 때 널리 활용되는 강력한 함수입니다.