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.
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