memcpy
, wmemcpy
Copia bytes entre búferes. Hay disponibles versiones más seguras de estas funciones; consulte memcpy_s
, wmemcpy_s
.
Sintaxis
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
Nuevo búfer.
src
Búfer del que copiar.
count
Número de caracteres que se copiará.
Valor devuelto
El valor de dest
.
Comentarios
memcpy
copia count
bytes de src
a dest
; wmemcpy
copia count
caracteres anchos. Si las regiones de origen y de destino se superponen, el comportamiento de memcpy
no se define. Use memmove
para controlar las áreas superpuestas.
Importante
Asegúrese de que el búfer de destino es lo suficientemente grande como para dar cabida al número de caracteres copiados. Para obtener más información, consulte Evitar saturaciones del búfer.
Importante
Dado que se ha determinado que muchas saturaciones de búferes (posibles vulnerabilidades de seguridad) se deben a un uso inapropiado de memcpy
, esta función se cuenta entre las "prohibidas" por el Ciclo de vida de desarrollo de seguridad (SDL). Observará que algunas clases de biblioteca de VC ++ siguen utilizando memcpy
. Además, verá que el optimizador del compilador de VC ++ emite en ocasiones llamadas a memcpy
. El producto Visual C++ se desarrolla de acuerdo con el proceso SDL, por lo que se ha evaluado con cuidado el uso de esta función prohibida. En el caso de su uso por parte de bibliotecas, se han examinado meticulosamente las llamadas para garantizar que no provoquen saturaciones de búferes. En el caso del compilador, determinados patrones de código se reconocen en ocasiones como idénticos al patrón de memcpy
, y por tanto se reemplazan con una llamada a la función. En tales casos, el uso de memcpy
no es menos seguro de lo que hubieran sido las instrucciones originales; estas simplemente se han optimizado como una llamada a la función memcpy
para mejorar el rendimiento. Al igual que el uso de funciones de CRT "seguras" no garantiza la seguridad (solo dificulta la falta de seguridad), el uso de funciones "prohibidas" no garantiza el peligro (solo se requiere un mayor escrutinio para garantizar la seguridad).
Dado que el uso de memcpy
por parte del compilador y las bibliotecas de VC ++ está tan estudiado, se permiten estas llamadas dentro del código que cumple por lo demás con SDL. Las llamadas a memcpy
en el código fuente de la aplicación solo cumplen con SDL si las han revisado expertos en seguridad.
Las funciones memcpy
y wmemcpy
solo quedan en desuso si la constante _CRT_SECURE_DEPRECATE_MEMORY
se define antes de la instrucción #include
, como se muestra en los ejemplos siguientes:
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>
o
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>
Requisitos
Routine | Encabezado necesario |
---|---|
memcpy |
<memory.h> o <string.h> |
wmemcpy |
<wchar.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
Vea memmove
para obtener un ejemplo de cómo usar memcpy
.
Consulte también
Manipulación del búfer
_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