Share via


memcpy_s, wmemcpy_s

Copia bytes entre búferes. Estas funciones son versiones de memcpy, wmemcpy con mejoras de seguridad como se describe en Características de seguridad de CRT.

Sintaxis

errno_t memcpy_s(
   void *dest,
   size_t destSize,
   const void *src,
   size_t count
);
errno_t wmemcpy_s(
   wchar_t *dest,
   size_t destSize,
   const wchar_t *src,
   size_t count
);

Parámetros

dest
Nuevo búfer.

destSize
Tamaño del búfer de destino (en bytes) para memcpy_s y caracteres anchos (wchar_t) para wmemcpy_s.

src
Búfer del que copiar.

count
Número de caracteres que se copiará.

Valor devuelto

Devuelve cero si se ejecuta correctamente; devuelve un código de error si se produce un error.

Condiciones de error

dest destSize src count Valor devuelto Contenido de dest
cualquiera cualquiera cualquiera 0 0 No modificado
NULL cualquiera cualquiera distinto de cero EINVAL No modificado
cualquiera cualquiera NULL distinto de cero EINVAL dest se pone a cero
cualquiera < count cualquiera distinto de cero ERANGE dest se pone a cero

Comentarios

memcpy_s copia count bytes de src a dest; wmemcpy_s copia count caracteres anchos. Si las regiones de origen y destino se superponen, el comportamiento de memcpy_s no está definido. Use memmove_s para controlar las áreas superpuestas.

Estas funciones validan sus parámetros. Si count no es cero y dest o src es un puntero nulo, o destSize es menor que count, estas funciones invocan al controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, estas funciones devuelven EINVAL o ERANGE, y se establecen errno en el valor devuelto.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Routine Encabezado necesario
memcpy_s <memory.h> o <string.h>
wmemcpy_s <wchar.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

// crt_memcpy_s.c
// Copy memory in a more secure way.

#include <memory.h>
#include <stdio.h>

int main()
{
   int a1[10], a2[100], i;
   errno_t err;

   // Populate a2 with squares of integers
   for (i = 0; i < 100; i++)
   {
      a2[i] = i*i;
   }

   // Tell memcpy_s to copy 10 ints (40 bytes), giving
   // the size of the a1 array (also 40 bytes).
   err = memcpy_s(a1, sizeof(a1), a2, 10 * sizeof (int) );
   if (err)
   {
      printf("Error executing memcpy_s.\n");
   }
   else
   {
     for (i = 0; i < 10; i++)
       printf("%d ", a1[i]);
   }
   printf("\n");
}
0 1 4 9 16 25 36 49 64 81

Consulte también

Manipulación del búfer
_memccpy
memchr, wmemchr
memcmp, wmemcmp
memmove, wmemmove
memset, wmemset
strcpy, wcscpy, _mbscpy
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l