memcpy_s
, wmemcpy_s
Copia bytes entre buffers. Essas funções são versões do , com aprimoramentos de segurança, conforme descrito em Recursos de memcpy
segurança na CRT. wmemcpy
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.
Retornar valor
Zero se for bem-sucedido; um código de erro em caso de falha.
Condições de erro
dest |
destSize |
src |
count |
Retornar valor | Conteúdo de dest |
---|---|---|---|---|---|
qualquer | qualquer | qualquer | 0 | 0 | Não modificado |
NULL |
qualquer | qualquer | diferente de zero | EINVAL |
Não modificado |
qualquer | qualquer | NULL |
diferente de zero | EINVAL |
dest é zerado |
qualquer | < count |
qualquer | diferente de zero | ERANGE |
dest é zerado |
Comentários
memcpy_s
copia bytes de src
para ; wmemcpy_s
copia count
count
dest
caracteres largos. 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 for um ponteiro nulo, ou destSize
src
for menor que count
, essas funções invocarão o manipulador de parâmetros 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 de retorno.
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 |
---|---|
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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de