Aracılığıyla paylaş


memcpy_s, wmemcpy_s

Arabellekler arasında bayt kopyalar. Bu işlevler, CRT'deki memcpy wmemcpyGüvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri içeren sürümleridir.

Sözdizimi

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
);

Parametreler

dest
Yeni arabellek.

destSize
Hedef arabelleğin boyutu için bayt memcpy_s ve için geniş karakterler (wchar_t) wmemcpy_scinsinden.

src
Kopyalanacak arabellek.

count
Kopyalanacak karakter sayısı.

Dönüş değeri

Başarılı olursa sıfır; hatayla ilgili bir hata kodu.

Hata koşulları

dest destSize src count Dönüş değeri İçeriği dest
herhangi bir herhangi bir herhangi bir 0 0 Değiştirilmedi
NULL herhangi bir herhangi bir sıfır olmayan EINVAL Değiştirilmedi
herhangi bir herhangi bir NULL sıfır olmayan EINVAL dest sıfırlandı
herhangi bir < count herhangi bir sıfır olmayan ERANGE dest sıfırlandı

Açıklamalar

memcpy_s baytları count öğesine src destkopyalar; wmemcpy_s geniş karakterleri kopyalar count . Kaynak ve hedef bölgeler çakışıyorsa, öğesinin memcpy_s davranışı tanımlanmamıştır. Çakışan bölgeleri işlemek için kullanın memmove_s .

Bu işlevler parametrelerini doğrular. Sıfır olmayan ve dest null bir işaretçiyse veya src destSize değerinden countküçüksecount, bu işlevler Parametre doğrulamasında açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesi için izin verilirse, bu işlevler veya ERANGEdöndürür EINVAL ve dönüş değerine ayarlanırerrno.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Gereksinimler

Yordam Gerekli başlık
memcpy_s <memory.h> veya <string.h>
wmemcpy_s <wchar.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// 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

Ayrıca bkz.

Arabellek işleme
_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