Compartir a través de


memmove_s, wmemmove_s

Mueve un búfer a otro.Éstas son versiones de memmove, wmemmove con mejoras de seguridad como se describe en Características de seguridad en CRT.

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 de caracteres (wmemmove_s) para 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

no modificado

cualquier

< count

cualquier

ERANGE

no modificado

Comentarios

copia los bytes de count de caracteres de src a dest*.* Si algunas regiones de origen y de destino se superponen, memmove_s garantiza que los bytes de origen originales en la región que se superpone se copiarán antes de ser sobrescrito.

Si dest o si src es un puntero null, o si la cadena de destino es demasiado pequeño, estas funciones invoca un 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

memmove_s

<string.h>

wmemmove_s

<wchar.h>

Para obtener información adicional de compatibilidad, vea compatibilidad en la Introducción.

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

Equivalente en .NET Framework

System:: búfer:: BlockCopy

Vea también

Referencia

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