Udostępnij za pośrednictwem


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 memcpyuż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