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