Share via


memmove_s, wmemmove_s

將某個緩衝區移到另一個緩衝區。 這些函式是 的版本 memmovewmemmove 具有 CRT 中安全性功能中所述 的安全性增強功能。

語法

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) 數目。

傳回值

如果成功,就是零,如果失敗,則為錯誤碼

錯誤條件

dest numberOfElements src 傳回值 dest 的內容。
NULL 任意 任意 EINVAL 未修改
任意 任意 NULL EINVAL 未修改
任意 < count 任意 ERANGE 未修改

備註

count 字元的位元組從 src 複製到 dest 。 如果來源和目的地區域的某些部分重迭, memmove_s 請確定重迭區域中的原始來源位元組會在覆寫之前先複製。

如果 或 如果 srcdest 為 Null 指標,或目的地字串太小,則這些函式會叫用不正確參數處理常式,如參數驗證 中所述 。 如果允許繼續執行,這些函式會傳回 EINVAL,並將 errno 設為 EINVAL

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

需求

常式 必要的標頭
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);
}

輸出

Before: 0123456789
After: 0012345789

另請參閱

緩衝區操作
_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