Sdílet prostřednictvím


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