memmove_s
, wmemmove_s
Verschiebt einen Puffer in einen anderen. Diese Funktionen sind Versionen von memmove
, wmemmove
mit Sicherheitsverbesserungen, wie in sicherheitsfeatures im 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 |
Beliebig | Beliebig | EINVAL |
nicht geändert |
Beliebig | Beliebig | NULL |
EINVAL |
nicht geändert |
Beliebig | < count |
Beliebig | 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. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the 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);
}
Ausgabe
Before: 0123456789
After: 0012345789
Siehe auch
Puffermanipulation
_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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für