memmove_s, wmemmove_s

Move um buffer para outro.Estas são as versões do memmove, wmemmove com aprimoramentos de segurança, conforme 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 caracteres (wmemmove_s) para copiar.

Valor de retorno

Zero se for bem sucedida; um código de erro em caso de falha

Condições de erro

dest

numberOfElements

src

Valor de Retorno

Conteúdo dedest

NULL

any

any

EINVAL

não modificado

any

any

NULL

EINVAL

não modificado

any

< count

any

ERANGE

não modificado

Comentários

Cópias count bytes de caracteres do src para dest*.* Se algumas regiões da área de origem e o destino se sobrepõem, memmove_s garante que os bytes de código-fonte original na região de sobreposição são copiados antes de serem sobrescritas.

Se dest ou se src é um ponteiro nulo ou se a seqüência de caracteres de destino é muito pequena, essas funções invocar um manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro .Se a execução terá permissão para continuar, essas funções retornam EINVAL e defina errno para EINVAL.

Requisitos

Rotina

Cabeçalho necessário

memmove_s

<string.h>

wmemmove_s

<wchar.h>

Para obter 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