Freigeben über


memmove_s, wmemmove_s

Verschiebt einen Puffer in einen anderen. Diese Funktionen sind Versionen von memmove, wmemmove mit Sicherheitsverbesserungen wie unter Sicherheitsfunktionen in der CRT beschrieben.

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
);

Parameter

dest
Zielobjekt.

numberOfElements
Größe des Zielpuffers.

src
Quellobjekt.

count
Anzahl der zu kopierenden Bytes (memmove_s) oder Zeichen (wmemmove_s).

Rückgabewert

Null, wenn erfolgreich; ein Fehlercode, wenn ein Fehler auftritt

Fehlerbedingungen

dest numberOfElements src Rückgabewert Inhalt von dest
NULL any any EINVAL nicht geändert
any any NULL EINVAL nicht geändert
any < count any ERANGE nicht geändert

Hinweise

Kopiert count Bytes von Zeichen von src in dest. Wenn sich einige Teile der Quelle und der Zielbereiche überlappen, stellen Sie sicher, memmove_s dass die ursprünglichen Quellbytes im überlappenden Bereich kopiert werden, bevor sie überschrieben werden.

Wenn dest es sich um einen Nullzeiger handelt oder src die Zielzeichenfolge zu klein ist, rufen diese Funktionen einen ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen EINVAL zurück und stellen errno auf EINVAL ein.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.

Anforderungen

Routine Erforderlicher Header
memmove_s <string.h>
wmemmove_s <wchar.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

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

Siehe auch

Pufferbearbeitung
_memccpy
memcpy, wmemcpy
strcpy_s, wcscpy_s_mbscpy_s
strcpy, wcscpy_mbscpy
strncpy_s, , _strncpy_s_lwcsncpy_s, _wcsncpy_s_l, , _mbsncpy_s_mbsncpy_s_l
strncpy, , _strncpy_lwcsncpy, _wcsncpy_l, , _mbsncpy_mbsncpy_l