memcpy_s, wmemcpy_smemcpy_s, wmemcpy_s

버퍼 간에 바이트를 복사합니다.Copies bytes between buffers. 이러한 함수는 CRT의 보안 기능에 설명된 대로 강화된 보안 기능이 있는 memcpy, wmemcpy의 버전입니다.These are versions of memcpy, wmemcpy with security enhancements as described in Security Features in the CRT.

구문Syntax

errno_t memcpy_s(
   void *dest,
   size_t destSize,
   const void *src,
   size_t count
);
errno_t wmemcpy_s(
   wchar_t *dest,
   size_t destSize,
   const wchar_t *src,
   size_t count
);

매개 변수Parameters

destdest
새 버퍼입니다.New buffer.

destSizedestSize
대상 버퍼의 크기로, memcpy_s의 경우 바이트 단위이고 wmemcpy_s의 경우 와이드 문자(wchar_t) 단위입니다.Size of the destination buffer, in bytes for memcpy_s and wide characters (wchar_t) for wmemcpy_s.

srcsrc
복사할 버퍼입니다.Buffer to copy from.

countcount
복사할 문자 수입니다.Number of characters to copy.

Return ValueReturn Value

성공 시 0이고, 실패 시 오류 코드입니다.Zero if successful; an error code on failure.

오류 조건Error Conditions

destdest destSizedestSize srcsrc countcount 반환 값Return value 대상 의 내용Contents of dest
anyany anyany anyany 00 00 수정 안 됨Not modified
NNULL anyany anyany 0이 아닌 값non-zero EINVALEINVAL 수정 안 됨Not modified
anyany anyany NNULL 0이 아닌 값non-zero EINVALEINVAL 대상 의 0을 초과 합니다.dest is zeroed out
anyany < < count anyany 0이 아닌 값non-zero ERANGEERANGE 대상 의 0을 초과 합니다.dest is zeroed out

설명Remarks

memcpy_s 복사본은 src 에서 dest로 바이트 수를 계산 합니다. wmemcpy_s 복사본은 와이드 문자 (2 바이트)를 계산 합니다.memcpy_s copies count bytes from src to dest; wmemcpy_s copies count wide characters (two bytes). 원본과 대상이 겹치면 memcpy_s 의 동작이 정의 되지 않습니다.If the source and destination overlap, the behavior of memcpy_s is undefined. Memmove_s 를 사용 하 여 겹치는 영역을 처리할 수 있습니다.Use memmove_s to handle overlapping regions.

이러한 함수는 해당 함수 매개 변수의 유효성을 검사합니다.These functions validate their parameters. Count 가 0이 아니고 dest 또는 Src 가 null 포인터 이거나 destsizeCount보다 작은 경우 이러한 함수는 매개 변수 유효성 검사에 설명 된 대로 잘못 된 매개 변수 처리기를 호출 합니다.If count is non-zero and dest or src is a null pointer, or destSize is smaller than count, these functions invoke the invalid parameter handler, as described in Parameter Validation. 계속 해 서 실행 하도록 허용한 경우 이러한 함수는 EINVAL 또는 ERANGE 을 반환 하 고 errno 를 반환 값으로 설정 합니다.If execution is allowed to continue, these functions return EINVAL or ERANGE and set errno to the return value.

기본적으로이 함수의 전역 상태는 응용 프로그램으로 범위가 지정 됩니다.By default, this function's global state is scoped to the application. 이를 변경 하려면 CRT의 전역 상태를 참조 하세요.To change this, see Global state in the CRT.

요구 사항Requirements

루틴에서 반환된 값Routine 필수 헤더Required header
memcpy_smemcpy_s <memory.h> 또는 <string.h><memory.h> or <string.h>
wmemcpy_swmemcpy_s <wchar.h><wchar.h>

호환성에 대한 자세한 내용은 Compatibility을 참조하세요.For additional compatibility information, see Compatibility.

예제Example

// crt_memcpy_s.c
// Copy memory in a more secure way.

#include <memory.h>
#include <stdio.h>

int main()
{
   int a1[10], a2[100], i;
   errno_t err;

   // Populate a2 with squares of integers
   for (i = 0; i < 100; i++)
   {
      a2[i] = i*i;
   }

   // Tell memcpy_s to copy 10 ints (40 bytes), giving
   // the size of the a1 array (also 40 bytes).
   err = memcpy_s(a1, sizeof(a1), a2, 10 * sizeof (int) );
   if (err)
   {
      printf("Error executing memcpy_s.\n");
   }
   else
   {
     for (i = 0; i < 10; i++)
       printf("%d ", a1[i]);
   }
   printf("\n");
}
0 1 4 9 16 25 36 49 64 81

참조See also

버퍼 조작Buffer Manipulation
_memccpy_memccpy
memchr, wmemchrmemchr, wmemchr
memcmp, wmemcmpmemcmp, wmemcmp
memmove, wmemmovememmove, wmemmove
memset, wmemsetmemset, wmemset
strcpy, wcscpy, _mbscpystrcpy, wcscpy, _mbscpy
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_lstrncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_lstrncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l