다음을 통해 공유


memmove_s, wmemmove_s

다른 하나의 버퍼를 이동합니다. CRT의 보안 기능에 설명된 대로 보안 향상 기능이 포함된 memmove, wmemmove 버전입니다.

errno_t memmove_s( 
   void *dest, 
   size_t numberOfElements, 
   const void *src, 
   size_t count 
);
errno_t wmemmove_s( 
   wchar_t *dest, 
   size_t numberOfElements, 
   const wchar_t *src, 
   size_t count 
);

매개 변수

  • dest
    대상 개체입니다.

  • numberOfElements
    대상 버퍼의 크기입니다.

  • src
    개체 소스

  • count
    복사할 바이트 수 (memmove_s) 또는 문자 (wmemmove_s) 입니다.

반환 값

성공 시 0이고, 실패 시 오류 코드입니다.

오류 조건

dest

numberOfElements

src

반환 값

dest의 내용입니다.

NULL

any

any

EINVAL

수정 안 됨

any

any

NULL

EINVAL

수정 안 됨

any

< count

any

ERANGE

수정 안 됨

설명

문자들의 count 바이트들은 src 부터 dest*.*를 복사합니다. 원본 영역과 대상의 일부 영역이 겹치는 경우, memmove_s는 모두 겹치는 영역에서 원본 소스 바이트가 덮어쓰기 전에 복사되는지 확인합니다.

만일 dest 또는 src 가 null 포인터 이거나 대상 문자열이 너무 작으면, 이 함수는 매개 변수 유효성 검사 에 설명된 대로 잘못된 매개변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우, 이러한 함수는 EINVAL를 반환하고 errno를 EINVAL로 설정합니다.

요구 사항

루틴

필수 헤더

memmove_s

<string.h>

wmemmove_s

<wchar.h>

호환성에 대한 자세한 내용은 소개 단원의 호환성 부분을 참조하십시오.

예제

// crt_memmove_s.c
//
// The program demonstrates the 
// memmove_s function which works as expected
// for moving overlapping regions.

#include <stdio.h>
#include <string.h>

int main()
{
   char str[] = "0123456789";

   printf("Before: %s\n", str);

   // Move six bytes from the start of the string
   // to a new position shifted by one byte. To protect against
   // buffer overrun, the secure version of memmove requires the
   // the length of the destination string to be specified. 

   memmove_s((str + 1), strnlen(str + 1, 10), str, 6); 

   printf_s(" After: %s\n", str);
}

Output

Before: 0123456789
 After: 0012345789

해당 .NET Framework 항목

System::Buffer::BlockCopy

참고 항목

참조

버퍼 조작

_memccpy

memcpy, wmemcpy

strcpy_s, wcscpy_s, _mbscpy_s

strcpy, wcscpy, _mbscpy

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l

strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l