memmove_s
, wmemmove_s
Přesune jednu vyrovnávací paměť do druhé. Tyto funkce jsou verze memmove
, wmemmove
s vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.
Syntaxe
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
Cílový objekt.
numberOfElements
Velikost cílové vyrovnávací paměti.
src
Zdrojový objekt.
count
Počet bajtů (memmove_s
) nebo znaků (wmemmove_s
) ke zkopírování
Vrácená hodnota
Nula v případě úspěchu; kód chyby při selhání
Chybové podmínky
dest |
numberOfElements |
src |
Vrácená hodnota | Obsah dest |
---|---|---|---|---|
NULL |
jakékoliv | jakékoliv | EINVAL |
neupraveno |
jakékoliv | jakékoliv | NULL |
EINVAL |
neupraveno |
jakékoliv | < count |
jakékoliv | ERANGE |
neupraveno |
Poznámky
Zkopíruje count
bajty znaků od src
do dest
. Pokud se některé části zdrojové a cílové oblasti překrývají, před přepsáním se zajistí, memmove_s
že se původní zdrojové bajty v překrývající oblasti zkopírují.
Pokud dest
nebo pokud src
je ukazatel null nebo pokud je cílový řetězec příliš malý, tyto funkce vyvolat neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru . Pokud provádění může pokračovat, tyto funkce se vrátí EINVAL
a nastaví errno
na EINVAL
.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
memmove_s |
<string.h> |
wmemmove_s |
<wchar.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// 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);
}
Výstup
Before: 0123456789
After: 0012345789
Viz také
Manipulace s vyrovnávací pamětí
_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