Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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