memmove、wmemmove

移动一缓冲区到另一种缓冲区。 提供这些函数的更多安全版本;请参见 memmove_s、wmemmove_s

void *memmove(
   void *dest,
   const void *src,
   size_t count 
);
wchar_t *wmemmove(
   wchar_t *dest,
   const wchar_t *src,
   size_t count
);

参数

  • dest
    目标对象。

  • src
    源对象。

  • count
    复制 (memmove) 的字节数或字符 (wmemmove)。

返回值

dest*.* 的值。

备注

从src复制 count 字节(memmove) 或字符(wmemmove) 到 dest*.*。如果源区的某些区域与目标的重叠,函数确保了在重叠区域中的原始源字节在覆盖之前被复制。

Security Note,确保目标缓冲区的大小和源缓冲区大小相同。 有关更多信息,请参见避免缓冲区溢出

如果常数_CRT_SECURE_DEPRECATE_MEMORY先于声明定义以便否决函数,memmove 和 wmemmove 函数才会被否决,如下面的示例所示:

#define _CRT_SECURE_DEPRECATE_MEMORY
#include <string.h>
or
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>

要求

例程

必需的标头

memmove

<string.h>

wmemmove

<wchar.h>

有关其他兼容性信息,请参见“简介”中的兼容性

示例

// crt_memcpy.c
// Illustrate overlapping copy: memmove
// always handles it correctly; memcpy may handle
// it correctly.
//

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

char str1[7] = "aabbcc";

int main( void )
{
   printf( "The string: %s\n", str1 );
   memcpy( str1 + 2, str1, 4 );
   printf( "New string: %s\n", str1 );

   strcpy_s( str1, sizeof(str1), "aabbcc" );   // reset string

   printf( "The string: %s\n", str1 );
   memmove( str1 + 2, str1, 4 );
   printf( "New string: %s\n", str1 );
}
  

.NET Framework 等效项

System::Buffer::BlockCopy

请参见

参考

缓冲区操作

_memccpy

memcpy、wmemcpy

strcpy、wcscpy、_mbscpy

strncpy、_strncpy_l、wcsncpy、_wcsncpy_l、_mbsncpy、_mbsncpy_l