Freigeben über


memmove_s, wmemmove_s

Verschiebt einen Puffer in einen anderen.Dies sind Versionen von memmove, wmemmove mit beschrieben, wie unter Security Enhancements in Sicherheitsfeatures im CRT.

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 von Bytes kopiert werden sollen (memmove_s) oder Zeichen (wmemmove_s).

Rückgabewert

Beliebige wenn erfolgreich; Fehlercode bei Fehlern ein

Fehlerbedingungen

dest

numberOfElements

src

Rückgabewert

Inhalt von dest

NULL

alle

alle

EINVAL

nicht geändert

alle

alle

NULL

EINVAL

nicht geändert

alle

< count

alle

ERANGE

nicht geändert

Hinweise

Kopiert Bytes count Zeichen aus src zu dest*.* Wenn einige Bereiche des Quellbereichs und des Ziels überschneiden, wird sichergestellt, dass die ursprüngliche Quelle memmove_s Bytes im überlappenden Bereich kopiert werden, bevor diese überschrieben wird.

Wenn rufen dest oder wenn src ein NULL-Zeiger ist, oder wenn die Zielzeichenfolge zu klein ist, diese Funktionen einen ungültigen Parameter für ein, wie in Parametervalidierung beschrieben.Wenn die Ausführung fortgesetzt werden kann, darf dieser Funktionen geben EINVAL festlegen und errno zu EINVAL.

Anforderungen

Routine

Erforderlicher Header

memmove_s

<string.h>

wmemmove_s

<wchar.h>

Um Kompatibilität zusätzlichen Informationen 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);
}

Output

Before: 0123456789
 After: 0012345789

.NET Framework-Entsprechung

System::Puffer::BlockCopy

Siehe auch

Referenz

Puffer-Manipulation

_memccpy

memcpy, wmemcpy

strcpy_s, wcscpy_s, _mbscpy_s

überprüfte, 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