memmove_s
, wmemmove_s
Przenosi jeden bufor do drugiego. Te funkcje to wersje programu memmove
wmemmove
z 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_s
wmemmove_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