Compartilhar via


memmove_s, wmemmove_s

Move um buffer para outro. Estas funções são versões de memmove, wmemmove com aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.

Sintaxe

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
O número de bytes (memmove_s) ou caracteres (wmemmove_s) a serem copiados.

Valor retornado

Zero se for bem-sucedido ou um código de erro em caso de falha

Condições de erro

dest numberOfElements src Valor retornado 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 count bytes de caracteres de src para dest. Se algumas partes das regiões de origem e destino se sobrepuserem, memmove_s o garantirá que os bytes de origem originais na região sobreposta sejam copiados antes de serem substituídos.

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

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

Requisitos

Rotina Cabeçalho necessário
memmove_s <string.h>
wmemmove_s <wchar.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

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

Confira também

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