Udostępnij za pośrednictwem


memmove_s, wmemmove_s

Przenosi jeden bufor do drugiego. Te funkcje to wersje programu memmove wmemmovez ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.

Składnia

errno_t memmove_s(
   void *dest,
   size_t numberOfElements,
   const void *src,
   size_t count
);
errno_t wmemmove_s(
   wchar_t *dest,
   size_t numberOfElements,
   const wchar_t *src,
   size_t count
);

Parametry

dest
Obiekt docelowy.

numberOfElements
Rozmiar buforu docelowego.

src
Obiekt źródłowy.

count
Liczba bajtów () lub znaków (memmove_swmemmove_s) do skopiowania.

Wartość zwracana

Zero w przypadku powodzenia; kod błędu w przypadku błędu

Warunki błędu

dest numberOfElements src Wartość zwracana Zawartość dest
NULL dowolny dowolny EINVAL niezmodyfikowane
dowolny dowolny NULL EINVAL niezmodyfikowane
dowolny < count dowolny ERANGE niezmodyfikowane

Uwagi

Kopiuje bajty count znaków z src do dest. Jeśli niektóre części źródła i regionów docelowych nakładają się na siebie, memmove_s gwarantuje, że oryginalne bajty źródłowe w nakładających się regionach zostaną skopiowane przed zastąpieniem.

Jeśli dest lub jeśli src jest wskaźnikiem o wartości null lub jeśli ciąg docelowy jest za mały, te funkcje wywołują nieprawidłową procedurę obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametru . Jeśli wykonanie jest dozwolone do kontynuowania, te funkcje zwracają EINVAL i ustawiają wartość errno EINVAL.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek
memmove_s <string.h>
wmemmove_s <wchar.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// crt_memmove_s.c
//
// The program demonstrates the
// memmove_s function which works as expected
// for moving overlapping regions.

#include <stdio.h>
#include <string.h>

int main()
{
   char str[] = "0123456789";

   printf("Before: %s\n", str);

   // Move six bytes from the start of the string
   // to a new position shifted by one byte. To protect against
   // buffer overrun, the secure version of memmove requires the
   // the length of the destination string to be specified.

   memmove_s((str + 1), strnlen(str + 1, 10), str, 6);

   printf_s(" After: %s\n", str);
}

Wynik

Before: 0123456789
After: 0012345789

Zobacz też

Manipulowanie buforem
_memccpy
memcpy, wmemcpy
strcpy_s, , wcscpy_s_mbscpy_s
strcpy, , wcscpy_mbscpy
strncpy_s, , _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, , _mbsncpy_s_mbsncpy_s_l
strncpy, , _strncpy_l, wcsncpy, _wcsncpy_l, , _mbsncpy_mbsncpy_l