Compartilhar via


memcpy_s, wmemcpy_s

Bytes de cópias entre buffers.Essas são sistema autônomo versões de memcpy, wmemcpy com aprimoramentos de segurança conforme descrito em Aprimoramentos de segurança no CRT.

errno_t memcpy_s(
   void *dest,
   size_t numberOfElements,
   const void *src,
   size_t count 
);
errno_t wmemcpy_s(
   wchar_t *dest,
   size_t numberOfElements,
   const wchar_t *src,
   size_t count
);

Parâmetros

  • dest
    Novo buffer.

  • numberOfElements
    dimensionar do buffer de destino.

  • src
    Para copiar de buffer.

  • count
    Número de caracteres a serem copiados.

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

Sumário de dest

NULL

any

any

EINVAL

não modificado

any

any

NULL

EINVAL

dest é zerada

any

< count

any

ERANGE

dest é zerada

Comentários

memcpy_s cópias count bytes do src para dest; wmemcpy_s cópias count caracteres de largo (dois bytes). Se fonte e destino sobrepostas, o comportamento de memcpy_s não está definida. Use memmove_s para lidar com regiões sobrepostas.

Essas funções validar seus parâmetros.If dest ou src é um ponteiro nulo, ou numberOfElements é muito pequeno para o buffer, essas funções chamar o manipulador de parâmetro inválido sistema autônomo descrito em Validação de parâmetro. Se a execução for permitida para continuar, essas funções retornam EINVAL e conjunto errno para EINVAL.

Requisitos

Rotina

Cabeçalho necessário

memcpy_s

<memória.h> ou <string.h>

wmemcpy_s

<wchar.h>

Para obter informações adicionais compatibilidade, consulte Compatibilidade na introdução.

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 

Equivalente do NET Framework

Não aplicável. Para telefonar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.

Consulte também

Referência

Manipulação de buffer

_memccpy

memchr, wmemchr

memcmp, wmemcmp

memmove, wmemmove

memset, wmemset

strcpy wcscpy, _mbscpy

funções strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l