Skip to content

Latest commit

 

History

History
121 lines (90 loc) · 3.72 KB

memmove-s-wmemmove-s.md

File metadata and controls

121 lines (90 loc) · 3.72 KB
description title ms.date api_name api_location api_type topic_type f1_keywords helpviewer_keywords ms.assetid
Learn more about: memmove_s, wmemmove_s
memmove_s, wmemmove_s
4/2/2020
wmemmove_s
memmove_s
_o_wmemmove_s
msvcrt.dll
msvcr80.dll
msvcr90.dll
msvcr100.dll
msvcr100_clr0400.dll
msvcr110.dll
msvcr110_clr0400.dll
msvcr120.dll
msvcr120_clr0400.dll
ucrtbase.dll
api-ms-win-crt-string-l1-1-0.dll
ntoskrnl.exe
DLLExport
apiref
wmemmove_s
memmove_s
wmemmove_s function
memmove_s function
a17619e4-1307-4bb0-98c6-77f8c68dab2d

memmove_s, wmemmove_s

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