Compartir a través de


memcpy_s, wmemcpy_s

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

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

Parámetros

  • dest
    Nuevo búfer.

  • numberOfElements
    Tamaño del búfer de destino.

  • src
    Búfer a copiar de.

  • count
    Número de caracteres que se van a copiar.

Valor devuelto

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

Condiciones de error

dest

numberOfElements

src

Valor devuelto

Contenido de dest

NULL

any

any

EINVAL

no modificado

any

any

NULL

EINVAL

dest se pone a cero out

any

< count

any

ERANGE

dest se pone a cero out

Comentarios

memcpy_s copia los bytes de count de src a dest; caracteres anchos de count de copias de wmemcpy_s (dos bytes). Si el origen y el destino se superponen, el comportamiento de memcpy_s es indefinido. Uso memmove_s de controlar superponer las regiones.

Estas funciones validan sus parámetros. Si dest o src es un puntero NULL, o numberOfElements es demasiado pequeño para el búfer, estas funciones se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros. Si la ejecución puede continuar, estas funciones devuelven EINVAL y establecen errno en EINVAL.

Requisitos

Rutina

Encabezado necesario

memcpy_s

<memory.h> o <string.h>

wmemcpy_s

<wchar.h>

Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.

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");
}
  

Equivalente en .NET Framework

No es aplicable Para llamar a la función estándar de C, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.

Vea también

Referencia

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