Compartilhar via


memmove_s, wmemmove_s

Move um buffer para outro. Essas são as versões de memmove, wmemmove com aprimoramentos de segurança, como descrito em Recursos de segurança no 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
    Tamanho do buffer de destino.

  • src
    Objeto de origem.

  • count
    Número de bytes (memmove_s) ou de caracteres (wmemmove_s) a serem copiados.

Valor de retorno

Zero se bem-sucedido; um código de erro da falha

Condições de erro

dest

numberOfElements

src

Valor de retorno

Conteúdo de dest

NULL

any

any

EINVAL

não modificado

any

any

NULL

EINVAL

não modificado

any

< count

any

ERANGE

não modificado

Comentários

Copia bytes de count de caracteres de src a dest*.* Se algumas regiões da área de origem e de destino se sobrepõem, memmove_s assegura que os bytes de origem original na região sobreposta sejam copiados antes de ser substituído.

Se dest ou se src for um ponteiro nulo, ou se a cadeia de caracteres de destino for muito pequena, essas funções invoca um manipulador inválido do parâmetro, conforme descrito em Validação do parâmetro . Se a execução puder continuar, essas funções retornarão EINVAL e definirão errno para EINVAL.

Requisitos

Rotina

Cabeçalho necessário

memmove_s

<string.h>

wmemmove_s

<wchar.h>

Para informações adicionais de compatibilidade, consulte Compatibilidade na Introdução.

Exemplo

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

Saída

Before: 0123456789
 After: 0012345789

Equivalência do .NET Framework

System::Buffer::BlockCopy

Consulte também

Referência

Manipulação de buffer

_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