Compartir por


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