memmove_s, wmemmove_s

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Mueve un búfer a otra. Estas son versiones de memmove, wmemmove con mejoras de seguridad, como se describe en características de seguridad de 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 caracteres (wmemmove_s) para copiar.

Cero si es correcta; un código de error en caso de error

Condiciones de error

destnumberOfElementssrcValor devueltoContenido de dest
NULLanycualquieraEINVALno modificado
anycualquieraNULLEINVALno modificado
any< countcualquieraERANGEno modificado

Copias count bytes de caracteres de src a dest . Si algunas regiones del área de origen y el destino se superponen, memmove_s garantiza que se copian los bytes de origen original en la región superpuesta antes de que se sobrescriban.

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 del parámetro . Si la ejecución puede continuar, estas funciones devuelven EINVAL y establecen errno en EINVAL.

RutinaEncabezado necesario
memmove_s<string.h>
wmemmove_s<wchar.h>

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

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

Before: 0123456789  
 After: 0012345789  

System::buffer::BlockCopy

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

Mostrar: