memcpy_s, wmemcpy_s

Copia bytes entre búferes.Éstas son versiones de memcpy, wmemcpy con mejoras de seguridad como se describe en Características de seguridad en 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

cero si correctamente; un código de error del error.

condiciones de error

dest

numberOfElements

src

Valor devuelto

Contenido de dest

NULL

cualquier

cualquier

EINVAL

no modificado

cualquier

cualquier

NULL

EINVAL

dest se pone a cero out

cualquier

< count

cualquier

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 EINVAL return y errno determinado a 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, utilice PInvoke. Para obtener más información, vea La invocación de plataforma ejemplos.

Vea también

Referencia

Manipulación de 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