共用方式為


memmove_s、wmemmove_s

移動一個緩衝區至另一個。 這些是 memmove、wmemmove 的安全性增強版本,如 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

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