memcpy_s
, wmemcpy_s
Zkopíruje bajty mezi vyrovnávacími pamětí. Tyto funkce jsou verze memcpy
, wmemcpy
s vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.
Syntaxe
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
);
Parametry
dest
Nová vyrovnávací paměť.
destSize
Velikost cílové vyrovnávací paměti v bajtech pro memcpy_s
a široké znaky (wchar_t
) pro wmemcpy_s
.
src
Vyrovnávací paměť, ze které se má kopírovat.
count
Počet znaků, které se mají zkopírovat
Vrácená hodnota
Nula v případě úspěchu; kód chyby při selhání.
Chybové podmínky
dest |
destSize |
src |
count |
Vrácená hodnota | Obsah dest |
---|---|---|---|---|---|
jakékoliv | jakékoliv | jakékoliv | 0 | 0 | Neupraveno |
NULL |
jakékoliv | jakékoliv | nenulový | EINVAL |
Neupraveno |
jakékoliv | jakékoliv | NULL |
nenulový | EINVAL |
dest je vynulován |
jakékoliv | < count |
jakékoliv | nenulový | ERANGE |
dest je vynulován |
Poznámky
memcpy_s
kopíruje count
bajty od src
do dest
; wmemcpy_s
kopíruje count
široké znaky. Pokud se zdrojové a cílové oblasti překrývají, chování memcpy_s
není definováno. Slouží memmove_s
ke zpracování překrývajících se oblastí.
Tyto funkce ověřují své parametry. Pokud count
je nenulový nebo dest
src
je ukazatel null nebo destSize
je menší než count
, tyto funkce vyvolávají neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud provádění může pokračovat, vrátí tyto funkce EINVAL
nebo ERANGE
a nastaví errno
se na vrácenou hodnotu.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
memcpy_s |
<memory.h> nebo <string.h> |
wmemcpy_s |
<wchar.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// 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
Viz také
Manipulace s vyrovnávací pamětí
_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