memcpy
, wmemcpy
Kopiuje bajty między. Dostępne są bezpieczniejsze wersje tych funkcji; zobacz memcpy_s
, wmemcpy_s
.
Składnia
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
Nowy bufor.
src
Bufor do skopiowania.
count
Liczba znaków do skopiowania.
Wartość zwracana
Wartość dest
.
Uwagi
memcpy
kopiuje bajty count
z src
do dest
; wmemcpy
kopiuje count
szerokie znaki. Jeśli regiony źródłowe i docelowe nakładają się na siebie, zachowanie elementu memcpy
jest niezdefiniowane. Służy memmove
do obsługi nakładających się regionów.
Ważne
Upewnij się, że bufor docelowy jest wystarczająco duży, aby pomieścić liczbę skopiowanych znaków. Aby uzyskać więcej informacji, zobacz Unikanie przekroków buforu.
Ważne
Ponieważ tak wiele przepełnienia buforu, a tym samym potencjalne luki w zabezpieczeniach, zostały śledzone w celu nieprawidłowego memcpy
użycia funkcji , ta funkcja jest wymieniona wśród funkcji "zakazanych" przez cykl projektowania zabezpieczeń (SDL). Możesz zauważyć, że niektóre klasy bibliotek VC++ nadal używają klasy memcpy
. Ponadto można zauważyć, że optymalizator kompilatora VC++ czasami emituje wywołania metody .memcpy
Produkt Visual C++ jest opracowywany zgodnie z procesem SDL, dlatego użycie tej zakazanej funkcji zostało ściśle ocenione. W przypadku korzystania z biblioteki wywołania zostały dokładnie zbadane, aby upewnić się, że przepełnienie buforu nie będzie dozwolone za pośrednictwem tych wywołań. W przypadku kompilatora czasami niektóre wzorce kodu są rozpoznawane jako identyczne ze wzorcem memcpy
, a tym samym są zastępowane wywołaniem funkcji. W takich przypadkach użycie elementu memcpy
nie jest bardziej niebezpieczne niż oryginalne instrukcje. Zostałyby one po prostu zoptymalizowane pod kątem wywołania funkcji dostosowanej memcpy
do wydajności. Podobnie jak korzystanie z "bezpiecznych" funkcji CRT nie gwarantuje bezpieczeństwa (po prostu utrudniają one niebezpieczne), korzystanie z funkcji "zakazanych" nie gwarantuje niebezpieczeństwa (po prostu wymagają większej kontroli w celu zapewnienia bezpieczeństwa).
Ponieważ memcpy
użycie przez kompilator i bibliotek VC++ zostało tak starannie zbadane, te wywołania są dozwolone w kodzie, który w inny sposób jest zgodny z językiem SDL. memcpy
wywołania wprowadzone w kodzie źródłowym aplikacji są zgodne tylko z językiem SDL, gdy to użycie zostało przejrzyone przez ekspertów ds. zabezpieczeń.
memcpy
Funkcje i wmemcpy
są przestarzałe tylko wtedy, gdy stała _CRT_SECURE_DEPRECATE_MEMORY
jest zdefiniowana przed instrukcją#include
, jak w następujących przykładach:
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>
lub
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>
Wymagania
Procedura | Wymagany nagłówek |
---|---|
memcpy |
<memory.h> lub <string.h> |
wmemcpy |
<wchar.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
Zobacz memmove
, aby zapoznać się z przykładem sposobu używania elementu memcpy
.
Zobacz też
Manipulowanie buforem
_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