Partilhar via


memcpy_s, wmemcpy_s

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