Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Moves one buffer to another. These functions are versions of memmove
, wmemmove
with security enhancements as described in Security features in the CRT.
Syntax
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
);
Parameters
dest
Destination object.
numberOfElements
Size of the destination buffer.
src
Source object.
count
Number of bytes (memmove_s
) or characters (wmemmove_s
) to copy.
Return value
Zero if successful; an error code on failure
Error conditions
dest |
numberOfElements |
src |
Return value | Contents of dest |
---|---|---|---|---|
NULL |
any | any | EINVAL |
not modified |
any | any | NULL |
EINVAL |
not modified |
any | < count |
any | ERANGE |
not modified |
Remarks
Copies count
bytes of characters from src
to dest
. If some portions of the source and the destination regions overlap, memmove_s
ensures that the original source bytes in the overlapping region are copied before being overwritten.
If dest
or if src
is a null pointer, or if the destination string is too small, these functions invoke an invalid parameter handler, as described in Parameter validation . If execution is allowed to continue, these functions return EINVAL
and set errno
to EINVAL
.
By default, this function's global state is scoped to the application. To change this behavior, see Global state in the CRT.
Requirements
Routine | Required header |
---|---|
memmove_s |
<string.h> |
wmemmove_s |
<wchar.h> |
For more compatibility information, see Compatibility.
Example
// 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
See also
Buffer manipulation
_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