memcpy
, wmemcpy
Copia bytes entre buffers. Versões mais seguras dessas funções estão disponíveis; confira memcpy_s
, wmemcpy_s
.
Sintaxe
void *memcpy(
void *dest,
const void *src,
size_t count
);
wchar_t *wmemcpy(
wchar_t *dest,
const wchar_t *src,
size_t count
);
Parâmetros
dest
Novo buffer.
src
Buffer do qual copiar.
count
O número de caracteres a serem copiados.
Valor retornado
O valor de dest
.
Comentários
memcpy
copia bytes count
de src
a dest
; wmemcpy
copia caracteres largos count
. Se as regiões de origem e destino se sobrepõem, o comportamento de memcpy
é indefinido. Use memmove
para lidar com regiões sobrepostas.
Importante
Certifique-se de que o buffer de destino seja grande o suficiente para acomodar o número de caracteres copiados. Para obter mais informações, confira Como evitar sobrecargas de buffer.
Importante
Como muitas saturações e, portanto, potenciais explorações de segurança, foram rastreadas para o uso impróprio de memcpy
, essa função é listada entre as funções "banidas" pelo SDL (Security Development Lifecycle). Você pode observar que algumas classes de biblioteca do VC++ continuam a usar memcpy
. Além disso, você pode observar que o otimizador do compilador do VC++, às vezes, emite chamadas para memcpy
. O produto Visual C++ foi desenvolvido de acordo com o processo SDL e, portanto, o uso desta função proibida foi cuidadosamente avaliado. No caso do uso dela pela biblioteca, as chamadas foram cuidadosamente examinadas para garantir que os estouros de buffer não serão permitidos por meio dessas chamadas. No caso do compilador, às vezes, certos padrões de código são reconhecidos como idênticos ao padrão de memcpy
e, portanto, são substituídos por uma chamada para a função. Nesses casos, o uso de memcpy
é não é mais inseguro do que as instruções originais seriam, elas simplesmente foram otimizadas para uma chamada para a função memcpy
ajustada para o desempenho. Assim como o uso de funções de CRT "seguras" não assegura a segurança (elas simplesmente tornam mais difícil não estar seguro), o uso de funções “proibidas” não assegura o perigo (elas apenas exigem um exame maior para garantir a segurança).
Como o uso de memcpy
pelas bibliotecas e pelo compilador do VC++ foi muito bem examinado, essas chamadas são permitidas no código que de outra forma estão em conformidade com o SDL. As chamadas de memcpy
introduzidas no código-fonte do aplicativo só são consideradas em conformidade com o SDL quando esse uso for examinado por especialistas em segurança.
As funções memcpy
e wmemcpy
serão preteridas somente se a constante _CRT_SECURE_DEPRECATE_MEMORY
for definida antes da instrução #include
, como nos seguintes exemplos:
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>
or
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>
Requisitos
Rotina | Cabeçalho necessário |
---|---|
memcpy |
<memory.h> ou <string.h> |
wmemcpy |
<wchar.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
Consulte memmove
para encontrar um exemplo de como usar memcpy
.
Confira também
Manipulação de buffer
_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