memcpy_s, wmemcpy_s
Kopie bajtów między buforów.Są to wersje memcpy, wmemcpy z rozszerzeń zabezpieczeń opisane w Funkcje zabezpieczeń w CRT.
errno_t memcpy_s(
void *dest,
size_t numberOfElements,
const void *src,
size_t count
);
errno_t wmemcpy_s(
wchar_t *dest,
size_t numberOfElements,
const wchar_t *src,
size_t count
);
Parametry
dest
Nowe buforu.numberOfElements
Rozmiar buforu docelowego.src
Bufor do skopiowania.count
Liczba znaków do skopiowania.
Wartość zwracana
Zero, jeśli kończy się pomyślnie; Kod błędu w przypadku awarii.
Warunki błędów
dest |
numberOfElements |
src |
Zwracanie wartości |
Zawartośćdest |
---|---|---|---|---|
NULL |
wszelkie |
wszelkie |
EINVAL |
Nie zmodyfikowano |
wszelkie |
wszelkie |
NULL |
EINVAL |
destjest zerowana |
wszelkie |
< count |
wszelkie |
ERANGE |
destjest zerowana |
Uwagi
memcpy_scopies count bytes from src to dest; wmemcpy_skopie count szerokości znaków (dwa bajty).Jeśli źródłowy i docelowy nakładania, zachowanie memcpy_s jest niezdefiniowane.Użyj memmove_s do obsługi pokrywających się obszarów.
Te funkcje sprawdzania poprawności ich parametrów.Jeśli dest lub src jest wskaźnik null, lub numberOfElements jest za mały dla buforu, te funkcje wywołania obsługi nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, funkcje te zwracają EINVAL i errno do EINVAL.
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
---|---|
memcpy_s |
<memory.h> lub <string.h> |
wmemcpy_s |
<wchar.h> |
Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.
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");
}
Odpowiednik w programie .NET Framework
Nie dotyczy. Aby wywołać standardowych funkcji C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.
Zobacz też
Informacje
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l