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
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l