memmovewmemmove

将一个缓冲区移到另一个缓冲区。 提供这些函数的更安全版本;请参阅 memmove_swmemmove_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 的值。

备注

count 字节 (memmove) 或字符 (wmemmove) 从 src 复制到 dest。 如果源区域和目标区域的某些部分重叠,则两个函数都可确保在重叠区域中的原始源字节被覆盖之前对其进行复制。

安全说明 确保目标缓冲区足够大,能够容纳所移动的字符数。 有关详细信息,请参阅避免缓冲区溢出

仅当常量 _CRT_SECURE_DEPRECATE_MEMORY#include 语句之前定义时,才会弃用 memmovewmemmove 函数,如以下示例所示:

#define _CRT_SECURE_DEPRECATE_MEMORY
#include <string.h>

#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 );
}
The string: aabbcc
New string: aaaabb
The string: aabbcc
New string: aaaabb

另请参阅

缓冲区操作
_memccpy
memcpywmemcpy
strcpy, wcscpy, _mbscpy
strncpy_strncpy_lwcsncpy_wcsncpy_l_mbsncpy_mbsncpy_l