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

Salida

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