Freigeben über


memmove_s, wmemmove_s

Wechselt ein Puffer zu anderen. Diese Versionen von memmove, wmemmove enthalten Sicherheitserweiterungen wie unter Sicherheitsfunktionen in der CRT beschrieben.

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 Bytes (memmove_s) oder (wmemmove_s) zu kopieren.

Rückgabewert

Null wenn erfolgreich; ein Fehlercode auf Fehler

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 Zeichen von src in dest*.* Wenn einige Bereiche des Ursprungsbereichs und des Ziels überschneiden, wird sichergestellt memmove_s, dass die ursprüngliche Quellbytes im überlappenden Bereich kopiert werden, bevor sie überschrieben wird.

Wenn rufen dest oder, wenn src ein NULL-Zeiger ist oder wenn der Zielzeichenfolge zu klein ist, diese Funktionen einen ungültigen Parameterhandler auf, wie in Parametervalidierung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen EINVAL zurück und stellen errno auf EINVAL ein.

Anforderungen

Routine

Erforderlicher Header

memmove_s

<string.h>

wmemmove_s

<wchar.h>

Zusätzliche Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.

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

Ausgabe

Before: 0123456789
 After: 0012345789

.NET Framework-Entsprechung

System::Buffer::BlockCopy

Siehe auch

Referenz

Pufferbearbeitung

_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