memcpy_s
, wmemcpy_s
Arabellekler arasında bayt kopyalar. Bu işlevler, CRT'deki memcpy
wmemcpy
Gü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_s
cinsinden.
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
dest
kopyalar; 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 count
küçü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 ERANGE
dö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