Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kopiuje bajty między. Te funkcje to wersje programu memcpy wmemcpyz 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