Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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