Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Copia bytes entre buffers. Estas funções são versões de memcpy, wmemcpy com aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.
Sintaxe
errno_t memcpy_s(
void *dest,
size_t destSize,
const void *src,
size_t count
);
errno_t wmemcpy_s(
wchar_t *dest,
size_t destSize,
const wchar_t *src,
size_t count
);
Parâmetros
dest
Novo buffer.
destSize
Tamanho do buffer de destino, em bytes para memcpy_s e caracteres largos (wchar_t) para wmemcpy_s.
src
Buffer do qual copiar.
count
O número de caracteres a serem copiados.
Valor retornado
Zero se for bem-sucedido; um código de erro em caso de falha.
Condições de erro
dest |
destSize |
src |
count |
Valor retornado | Conteúdo de dest |
|---|---|---|---|---|---|
| any | qualquer | any | 0 | 0 | Não modificado |
NULL |
any | any | diferente de zero | EINVAL |
Não modificado |
| any | any | NULL |
diferente de zero | EINVAL |
dest é zerado |
| any | < count |
any | diferente de zero | ERANGE |
dest é zerado |
Comentários
memcpy_s copia bytes count de src a dest; wmemcpy_s copia caracteres largos count. Se as regiões de origem e destino se sobrepõem, o comportamento de memcpy_s é indefinido. Use memmove_s para lidar com regiões sobrepostas.
Essas funções validam seus parâmetros. Se count for diferente de zero e dest ou src for um ponteiro nulo, ou destSize for menor que count, essas funções invocarão o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, essas funções retornarão EINVAL ou ERANGE, e definidas errno como o valor retornado.
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 |
|---|---|
memcpy_s |
<memory.h> ou <string.h> |
wmemcpy_s |
<wchar.h> |
Para obter informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
// crt_memcpy_s.c
// Copy memory in a more secure way.
#include <memory.h>
#include <stdio.h>
int main()
{
int a1[10], a2[100], i;
errno_t err;
// Populate a2 with squares of integers
for (i = 0; i < 100; i++)
{
a2[i] = i*i;
}
// Tell memcpy_s to copy 10 ints (40 bytes), giving
// the size of the a1 array (also 40 bytes).
err = memcpy_s(a1, sizeof(a1), a2, 10 * sizeof (int) );
if (err)
{
printf("Error executing memcpy_s.\n");
}
else
{
for (i = 0; i < 10; i++)
printf("%d ", a1[i]);
}
printf("\n");
}
0 1 4 9 16 25 36 49 64 81
Confira também
Manipulação de buffer
_memccpy
memchr, wmemchr
memcmp, wmemcmp
memmove, wmemmove
memset, wmemset
strcpy, wcscpy, _mbscpy
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, , _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, , _mbsncpy_s_l