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

任何

任何

EINVAL

不修改

任何

任何

NULL

EINVAL

不修改

任何

AMP_LT count

任何

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 等效项

系统:: 缓冲区:: 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