memcpy_s
, wmemcpy_s
Kopiuje bajty między. Te funkcje to wersje programu memcpy
wmemcpy
z ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
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
Nowy bufor.
destSize
Rozmiar buforu docelowego, w bajtach dla memcpy_s
i znaków szerokich (wchar_t
) dla wmemcpy_s
.
src
Bufor do skopiowania.
count
Liczba znaków do skopiowania.
Wartość zwracana
Zero w przypadku powodzenia; kod błędu dotyczący błędu.
Warunki błędu
dest |
destSize |
src |
count |
Wartość zwracana | Zawartość dest |
---|---|---|---|---|---|
dowolny | dowolny | dowolny | 0 | 0 | Nie zmodyfikowano |
NULL |
dowolny | dowolny | bez zera | EINVAL |
Nie zmodyfikowano |
dowolny | dowolny | NULL |
bez zera | EINVAL |
dest jest zeroed out |
dowolny | < count |
dowolny | bez zera | ERANGE |
dest jest zeroed out |
Uwagi
memcpy_s
kopiuje bajty count
z src
do dest
; wmemcpy_s
kopiuje count
szerokie znaki. Jeśli regiony źródłowe i docelowe nakładają się na siebie, zachowanie elementu memcpy_s
jest niezdefiniowane. Służy memmove_s
do obsługi nakładających się regionów.
Te funkcje weryfikują swoje parametry. Jeśli count
nie ma wartości zero lub dest
src
jest wskaźnikiem o wartości null lub destSize
jest mniejszy niż count
, te funkcje wywołują nieprawidłową procedurę obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, te funkcje zwracają EINVAL
wartość lub ERANGE
, a następnie ustawiają errno
wartość zwracaną.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
memcpy_s |
<memory.h> lub <string.h> |
wmemcpy_s |
<wchar.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// 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
Zobacz też
Manipulowanie buforem
_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