memcpy_s, wmemcpy_s

Bytes de cópias entre buffers.Estas são as versões do memcpy, wmemcpy com aprimoramentos de segurança, conforme descrito em Recursos 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
    Tamanho do buffer de destino.

  • src
    Para copiar a partir 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

Conteúdo dedest

NULL

any

any

EINVAL

não modificado

any

any

NULL

EINVAL

desté zerado

any

< count

any

ERANGE

desté zerado

Comentários

memcpy_scopies count bytes from src to dest; wmemcpy_scópias count caracteres extensos (dois bytes).Se a origem e destino sobrepor, o comportamento de memcpy_s é indefinido.Use memmove_s para lidar com regiões sobrepostas.

Essas funções validam seus parâmetros.Se dest ou src é um ponteiro nulo, ou numberOfElements é muito pequeno para o buffer, essas funções chamar o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, essas funções retornam EINVAL e defina errno para EINVAL.

Requisitos

Rotina

Cabeçalho necessário

memcpy_s

<memory.h> ou <string.h>

wmemcpy_s

<wchar.h>

Para obter informações adicionais de 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");
}
  

Equivalência do .NET Framework

Não aplicável. Para chamar 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

strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l