memmove_s
, wmemmove_s
Mueve un búfer a otro. Estas funciones son versiones de memmove
, wmemmove
con mejoras de seguridad, como se describe en Características de seguridad de CRT.
Sintaxis
errno_t memmove_s(
void *dest,
size_t numberOfElements,
const void *src,
size_t count
);
errno_t wmemmove_s(
wchar_t *dest,
size_t numberOfElements,
const wchar_t *src,
size_t count
);
Parámetros
dest
Objeto de destino.
numberOfElements
Tamaño del búfer de destino.
src
Objeto de origen.
count
Número de bytes (memmove_s
) o caracteres (wmemmove_s
) que se copiarán.
Valor devuelto
Devuelve cero si se ejecuta correctamente; devuelve un código de error si se produce un error
Condiciones del error
dest |
numberOfElements |
src |
Valor devuelto | Contenido de dest |
---|---|---|---|---|
NULL |
cualquiera | cualquiera | EINVAL |
no modificado |
cualquiera | cualquiera | NULL |
EINVAL |
no modificado |
cualquiera | < count |
cualquiera | ERANGE |
no modificado |
Comentarios
Copia count
bytes de caracteres de src
a dest
. Si algunas partes del origen y las regiones de destino se superponen, memmove_s
garantiza que los bytes de origen originales de la región superpuesta se copien antes de sobrescribirse.
Si dest
o si src
es un puntero nulo, o si la cadena de destino es demasiado pequeña, estas funciones invocan un 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
y establecen errno
en EINVAL
.
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 |
---|---|
memmove_s |
<string.h> |
wmemmove_s |
<wchar.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
// crt_memmove_s.c
//
// The program demonstrates the
// memmove_s function which works as expected
// for moving overlapping regions.
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "0123456789";
printf("Before: %s\n", str);
// Move six bytes from the start of the string
// to a new position shifted by one byte. To protect against
// buffer overrun, the secure version of memmove requires the
// the length of the destination string to be specified.
memmove_s((str + 1), strnlen(str + 1, 10), str, 6);
printf_s(" After: %s\n", str);
}
Output
Before: 0123456789
After: 0012345789
Consulte también
Manipulación del búfer
_memccpy
memcpy
, wmemcpy
strcpy_s
, , wcscpy_s
, _mbscpy_s
strcpy
, , wcscpy
, _mbscpy
strncpy_s
, _strncpy_s_l
, wcsncpy_s
, _wcsncpy_s_l
, , _mbsncpy_s
, _mbsncpy_s_l
strncpy
, _strncpy_l
, wcsncpy
, _wcsncpy_l
, , _mbsncpy
, _mbsncpy_l