memcpy_s, wmemcpy_smemcpy_s, wmemcpy_s

Copia bytes entre búferes.Copies bytes between buffers. Se trata de versiones de memcpy, wmemcpy con mejoras de seguridad, como se describe en Características de seguridad de CRT.These are versions of memcpy, wmemcpy with security enhancements as described in Security Features in the CRT.

SintaxisSyntax

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ámetrosParameters

destdest
Nuevo búfer.New buffer.

destSizedestSize
Tamaño del búfer de destino (en bytes) para memcpy_s y caracteres anchos (wchar_t) para wmemcpy_s.Size of the destination buffer, in bytes for memcpy_s and wide characters (wchar_t) for wmemcpy_s.

srcsrc
Búfer del que copiar.Buffer to copy from.

countcount
Número de caracteres que se copiará.Number of characters to copy.

Valor devueltoReturn Value

Devuelve cero si se ejecuta correctamente; devuelve un código de error si se produce un error.Zero if successful; an error code on failure.

Condiciones de errorError Conditions

destdest destSizedestSize srcsrc countcount Valor devueltoReturn value Contenido de destContents of dest
cualquieraany cualquieraany cualquieraany 00 00 No modificadoNot modified
ACEPTANULL cualquieraany cualquieraany distinto de ceronon-zero EINVALEINVAL No modificadoNot modified
cualquieraany cualquieraany ACEPTANULL distinto de ceronon-zero EINVALEINVAL dest está en cerodest is zeroed out
cualquieraany < recuento< count cualquieraany distinto de ceronon-zero ERANGEERANGE dest está en cerodest is zeroed out

ObservacionesRemarks

memcpy_s copia el número de bytes de src a dest; wmemcpy_s copia el número de caracteres anchos (dos bytes).memcpy_s copies count bytes from src to dest; wmemcpy_s copies count wide characters (two bytes). Si el origen y el destino se superponen, el comportamiento de memcpy_s es indefinido.If the source and destination overlap, the behavior of memcpy_s is undefined. Use memmove_s para administrar regiones superpuestas.Use memmove_s to handle overlapping regions.

Estas funciones validan sus parámetros.These functions validate their parameters. Si Count es distinto de cero y dest o src es un puntero nulo, o destSize es menor que Count, estas funciones invocan el controlador de parámetros no válidos, tal y como se describe en validación de parámetros.If count is non-zero and dest or src is a null pointer, or destSize is smaller than count, these functions invoke the invalid parameter handler, as described in Parameter Validation. Si la ejecución puede continuar, estas funciones devuelven EINVAL o ERANGE y establecen errno en el valor devuelto.If execution is allowed to continue, these functions return EINVAL or ERANGE and set errno to the return value.

De forma predeterminada, el ámbito de este estado global de esta función es la aplicación.By default, this function's global state is scoped to the application. Para cambiar esto, vea estado global en CRT.To change this, see Global state in the CRT.

RequisitosRequirements

RutinaRoutine Encabezado necesarioRequired header
memcpy_smemcpy_s <memory.h> o <string.h><memory.h> or <string.h>
wmemcpy_swmemcpy_s <wchar.h><wchar.h>

Para obtener información adicional sobre compatibilidad, consulte Compatibilidad.For additional compatibility information, see Compatibility.

EjemploExample

// 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énSee also

Manipulación del búferBuffer Manipulation
_memccpy_memccpy
memchr, wmemchrmemchr, wmemchr
memcmp, wmemcmpmemcmp, wmemcmp
memmove, wmemmovememmove, wmemmove
memset, wmemsetmemset, wmemset
strcpy, wcscpy, _mbscpystrcpy, wcscpy, _mbscpy
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_lstrncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_lstrncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l