Share via


memmove_s, wmemmove_s

Move um buffer para outro. Essas funções são versões do , com aprimoramentos de segurança, conforme descrito em Recursos de memmovesegurança na CRT. wmemmove

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.

Retornar valor

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

Condições de erro

dest numberOfElements src Retornar valor Conteúdo de dest
NULL qualquer qualquer EINVAL não modificado
qualquer qualquer NULL EINVAL não modificado
qualquer < count qualquer ERANGE não modificado

Comentários

Copia count bytes de caracteres de src para dest. Se algumas partes das regiões de origem e de destino se sobrepuserem, memmove_s certifique-se de que os bytes de origem originais na região sobreposta sejam copiados antes de serem substituídos.

Se dest ou se for um ponteiro nulo, ou se src a cadeia de caracteres de destino for muito pequena, essas funções invocarão um manipulador de parâmetros 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, consulte Estado global na 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