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 del 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 de destino se superponen, el comportamiento de memcpy_s
no se define. 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