Partilhar via


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