Udostępnij za pośrednictwem


memmove_s, wmemmove_s

Przenosi jeden bufor do innego.Są to wersje memmove, wmemmove z rozszerzeń zabezpieczeń opisane w Funkcje zabezpieczeń w CRT.

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 (memmove_s) lub znaki (wmemmove_s) do skopiowania.

Wartość zwracana

Zero, jeśli kończy się pomyślnie; Kod błędu w przypadku awarii

Warunki błędów

dest

numberOfElements

src

Zwracanie wartości

Zawartośćdest

NULL

wszelkie

wszelkie

EINVAL

Nie zmodyfikowano

wszelkie

wszelkie

NULL

EINVAL

Nie zmodyfikowano

wszelkie

< count

wszelkie

ERANGE

Nie zmodyfikowano

Uwagi

Kopie count bajtów znaków z src do dest*.* Jeżeli nakładają się w niektórych regionach obszar źródłowy i docelowy, memmove_s zapewnia, że oryginalny bajtów źródła w regionie nakładające się są kopiowane przed zastąpieniem.

Jeśli dest lub jeśli src jest wskaźnik zerowy, lub jeżeli ciąg docelowy jest zbyt mały, te funkcje Wywołaj funkcję obsługi nieprawidłowy parametr, zgodnie z opisem w Sprawdzanie poprawności parametru .Jeśli wykonanie może kontynuować, funkcje te zwracają EINVAL i errno do EINVAL.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

memmove_s

<string.h>

wmemmove_s

<wchar.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.

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);
}

Dane wyjściowe

Before: 0123456789
 After: 0012345789

Odpowiednik w programie .NET Framework

System::Buffer::BlockCopy

Zobacz też

Informacje

Manipulowanie buforu

_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