memcpy
, wmemcpy
Kopiert Bytes zwischen Puffern. Sicherere Versionen dieser Funktionen sind verfügbar; siehe memcpy_s
, wmemcpy_s
.
Syntax
void *memcpy(
void *dest,
const void *src,
size_t count
);
wchar_t *wmemcpy(
wchar_t *dest,
const wchar_t *src,
size_t count
);
Parameter
dest
Neuer Puffer.
src
Der Puffer, aus dem kopiert werden soll.
count
Anzahl der zu kopierenden Zeichen.
Rückgabewert
Der Wert von dest
.
Bemerkungen
memcpy
kopiert Bytes von src
in dest
; wmemcpy
kopiert count
count
breite Zeichen. Wenn sich die Quell- und Zielbereiche überlappen, wird das Verhalten nicht memcpy
definiert. Verwendung memmove
um überlappende Bereiche zu behandeln.
Wichtig
Stellen Sie sicher, dass der Zielpuffer dieselbe Größe wie der Quellpuffer aufweist bzw. größer ist. Weitere Informationen finden Sie unter Vermeiden von Pufferüberläufen.
Wichtig
Da so viele Pufferüberläufe und damit potenzielle Sicherheits-Exploits auf eine nicht ordnungsgemäße Verwendung memcpy
nachverfolgt wurden, wird diese Funktion unter den "gesperrten" Funktionen des Security Development Lifecycle (SDL) aufgeführt. Möglicherweise stellen Sie fest, dass einige VC++-Bibliotheksklassen weiterhin memcpy
verwenden. Darüber hinaus werden Sie feststellen, dass der VC++-Compileroptimierer manchmal Aufrufe von memcpy
ausgibt. Das Visual C++-Produkt wird gemäß des SDL-Prozesses entwickelt; die Verwendung dieser gesperrten Funktion wurde daher sorgfältig geprüft. Bei Verwendung in der Bibliothek wurden die Aufrufe sorgfältig geprüft, um sicherzustellen, dass Pufferüberläufe über diese Aufrufe nicht zulässig sind. Im Falle des Compilers werden manchmal bestimmte Codemuster als identisch mit dem Muster von memcpy
erkannt und daher mit einem Aufruf der Funktion ersetzt. In solchen Fällen ist die Verwendung von memcpy
nicht unsicherer als die ursprünglichen Anweisungen; sie wurden einfach für einen Aufruf der leistungsoptimierten memcpy
-Funktion optimiert. Ebenso wie die Verwendung von "sicheren" CRT-Funktionen keine Sicherheit garantiert (sie machen es einfach schwieriger, unsicher zu sein), garantiert die Verwendung von "verbotenen" Funktionen keine Gefahr (sie erfordern nur eine größere Kontrolle, um Sicherheit zu gewährleisten).
Da memcpy
die Verwendung durch den VC++-Compiler und -Bibliotheken so sorgfältig überprüft wurde, sind diese Aufrufe innerhalb von Code zulässig, der andernfalls dem SDL entspricht. memcpy
Aufrufe, die in Anwendungsquellcode eingeführt wurden, entsprechen nur dem SDL, wenn diese Verwendung von Sicherheitsexperten überprüft wurde.
Die memcpy
Funktionen wmemcpy
sind nur veraltet, wenn die Konstante _CRT_SECURE_DEPRECATE_MEMORY
vor der Include-Anweisung definiert ist, wie im folgenden Beispiel:
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>
oder
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>
Anforderungen
-Routine zurückgegebener Wert | Erforderlicher Header |
---|---|
memcpy |
<memory.h> oder <string.h> |
wmemcpy |
<wchar.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Compatibility.
Beispiel
Ein Beispiel für die Verwendung memcpy
finden Sie memmove
unter .
Weitere Informationen
Pufferbearbeitung
_memccpy
memchr
, wmemchr
memcmp
, wmemcmp
memmove
, wmemmove
memset
, wmemset
strcpy_s
, wcscpy_s
, _mbscpy_s
strncpy_s
, _strncpy_s_l
, wcsncpy_s
, _wcsncpy_s_l
, _mbsncpy_s
, _mbsncpy_s_l
\