memcpy
, wmemcpy
Zkopíruje bajty mezi vyrovnávacími pamětí. K dispozici jsou bezpečnější verze těchto funkcí; viz memcpy_s
, wmemcpy_s
.
Syntaxe
void *memcpy(
void *dest,
const void *src,
size_t count
);
wchar_t *wmemcpy(
wchar_t *dest,
const wchar_t *src,
size_t count
);
Parametry
dest
Nová vyrovnávací paměť.
src
Vyrovnávací paměť, ze které se má kopírovat.
count
Počet znaků, které se mají zkopírovat
Vrácená hodnota
Hodnota .dest
Poznámky
memcpy
kopíruje count
bajty od src
do dest
; wmemcpy
kopíruje count
široké znaky. Pokud se zdrojové a cílové oblasti překrývají, chování memcpy
není definováno. Slouží memmove
ke zpracování překrývajících se oblastí.
Důležité
Ujistěte se, že je cílová vyrovnávací paměť dostatečně velká, aby vyhovovala počtu zkopírovaných znaků. Další informace najdete v tématu Zabránění přetečení vyrovnávací paměti.
Důležité
Vzhledem k tomu, že tolik přetečení vyrovnávací paměti, a tak potenciální zneužití zabezpečení, bylo trasováno na nesprávné použití memcpy
, tato funkce je uvedena mezi "zakázané" funkce životního cyklu zabezpečení (SDL). Můžete si všimnout, že některé třídy knihovny VC++ nadále používají memcpy
. Kromě toho můžete pozorovat, že optimalizátor kompilátoru VC++ někdy generuje volání memcpy
. Produkt Visual C++ je vyvinut v souladu s procesem SDL, a proto bylo použití této zakázané funkce pečlivě vyhodnoceno. V případě použití knihovny byly volání pečlivě kontrolována, aby se zajistilo, že přetečení vyrovnávací paměti nebude povoleno prostřednictvím těchto volání. V případě kompilátoru jsou někdy některé vzory kódu rozpoznány jako identické se vzorem memcpy
, a proto jsou nahrazeny voláním funkce. V takových případech není použití memcpy
více nebezpečné než původní instrukce; byly jednoduše optimalizovány na volání funkce vyladěné memcpy
výkonem. Stejně jako použití "bezpečných" funkcí CRT nezaručuje bezpečnost (jen znesnadní být nebezpečné), použití "zakázaných" funkcí nezaručuje nebezpečí (pouze vyžadují větší kontrolu k zajištění bezpečnosti).
Vzhledem k tomu, že memcpy
použití kompilátorem a knihovnami VC++ bylo tak pečlivě prověřeno, jsou tato volání povolena v kódu, který jinak odpovídá SDL. memcpy
volání zavedená ve zdrojovém kódu aplikace odpovídají SDL pouze v případech, kdy bylo toto použití zkontrolováno odborníky na zabezpečení.
Funkce memcpy
jsou wmemcpy
zastaralé, pouze pokud je konstanta _CRT_SECURE_DEPRECATE_MEMORY
definovaná před příkazem #include
, jako v následujících příkladech:
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>
nebo
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
memcpy |
<memory.h> nebo <string.h> |
wmemcpy |
<wchar.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
Podívejte se memmove
na ukázku použití memcpy
.
Viz také
Manipulace s vyrovnávací pamětí
_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