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
Siehe auch
Referenz
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l