memcpy, wmemcpy

버퍼 간에 바이트를 복사합니다. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. memcpy_s, wmemcpy_s(을)를 참조하세요.

구문

void *memcpy(
   void *dest,
   const void *src,
   size_t count
);
wchar_t *wmemcpy(
   wchar_t *dest,
   const wchar_t *src,
   size_t count
);

매개 변수

dest
새 버퍼입니다.

src
복사할 버퍼입니다.

count
복사할 문자 수입니다.

반환 값

dest의 값

설명

memcpy(은)는 count 바이트를 src에서 dest(으)로 복사합니다; wmemcpy(은)는 와이드 문자를 count(으)로 복사합니다. 원본 및 대상 지역이 겹치면 memcpy 동작이 정의되지 않습니다. memmove를 사용하면 겹치는 영역을 처리할 수 있습니다.

Important

대상 버퍼가 복사된 문자 수를 수용할 수 있을 만큼 충분히 큰지 확인합니다. 자세한 내용은 버퍼 오버런 방지를 참조하세요.

Important

memcpy의 부적합한 사용으로 인해 매우 많은 버퍼 오버런과 보안 악용 가능성이 추적되었으므로 이 함수는 SDL(Security Development Lifecycle)에 의해 "금지" 항목으로 분류되었습니다. 일부 VC++ 라이브러리 클래스는 memcpy를 계속 사용할 수 있습니다. 또한 VC++ 컴파일러 최적화 프로그램에서 memcpy에 대한 호출을 내보내는 경우도 있습니다. Visual C++ 제품은 SDL 프로세스에 따라 개발되었으므로 이처럼 금지된 함수의 사용이 철저하게 평가되었습니다. 라이브러리에서 이러한 함수를 사용하는 경우에는 이러한 호출을 통해 버퍼 오버런이 허용되지 않도록 호출을 면밀하게 검사했습니다. 컴파일러의 경우 특정 코드 패턴이 memcpy의 패턴과 동일한 것으로 인식되어 함수 호출로 바뀌는 경우가 있습니다. 이러한 경우에는 memcpy를 사용해도 원래 지침처럼 위험하지 않습니다. 이러한 패턴은 성능이 조정된 memcpy 함수에 대한 호출로 최적화되었을 뿐이기 때문입니다. "안전한" CRT 함수를 사용한다고 해서 보안이 보장되는 것은 아니듯이(위험 가능성만 낮아질 뿐임), "금지된" 함수를 사용한다고 해서 반드시 위험한 것도 아니며 보안을 유지하려면 더욱 철저한 확인이 필요할 뿐입니다.

VC++ 컴파일러 및 라이브러리의 memcpy 사용이 매우 신중하게 조사되었으므로 이러한 호출은 코드 내에서 허용되며, 그렇지 않으면 SDL을 준수합니다. 애플리케이션 소스 코드에 도입된 memcpy 호출은 보안 전문가가 해당 사용을 검토한 경우에만 SDL을 준수합니다.

memcpywmemcpy 함수는 다음 예제와 같이 상수 _CRT_SECURE_DEPRECATE_MEMORY(이)가 #include 문 앞에 정의된 경우에만 사용되지 않습니다.

#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>

또는

#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>

요구 사항

루틴에서 반환된 값 필수 헤더
memcpy <memory.h> 또는 <string.h>
wmemcpy <wchar.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

memcpy(을)를 사용하는 방법에 대한 샘플은 memmove(을)를 참조하세요.

참고 항목

버퍼 조작
_memccpy
memchr, wmemchr
memcmp, wmemcmp
memmove, wmemmove
memset, wmemset
strcpy_s, wcscpy_s, _mbscpy_s
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l