memmove, wmemmove

Moves one buffer to another. More secure versions of these functions are available; see 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


Destination object.

Source object.

Number of bytes (memmove) or characters (wmemmove) to copy.

Return value

The value of dest.


Copies count bytes (memmove) or characters (wmemmove) from src to dest. If some portions of the source and the destination regions overlap, both functions ensure that the original source bytes in the overlapping region are copied before being overwritten.

Security Note Make sure that the destination buffer is large enough to accommodate the number of moved characters. For more information, see Avoiding buffer overruns.

The memmove and wmemmove functions are only deprecated if the constant _CRT_SECURE_DEPRECATE_MEMORY is defined before the #include statement, as shown in the following example:

#include <string.h>


#include <wchar.h>


Routine Required header
memmove <string.h>
wmemmove <wchar.h>

For more compatibility information, see Compatibility.


// 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

See also

Buffer manipulation
memcpy, wmemcpy
strcpy, wcscpy, _mbscpy
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l