memmove_s, wmemmove_s

Sposta un buffer a un altro.queste sono versioni di memmove, wmemmove con i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in 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
);

Parametri

  • dest
    oggetto di destinazione.

  • numberOfElements
    Dimensione del buffer di destinazione.

  • src
    oggetto di origine.

  • count
    Numero di byte (memmove_s) o caratteri (wmemmove_s) per copiare.

Valore restituito

Zero in caso di esito positivo; un codice di errore in caso di errore

condizioni di errore

dest

numberOfElements

src

Valore restituito

Contenuto di dest

NULL

qualsiasi

qualsiasi

EINVAL

non modificato

qualsiasi

qualsiasi

NULL

EINVAL

non modificato

qualsiasi

< count

qualsiasi

ERANGE

non modificato

Note

copie count byte di caratteri da src in dest*.* Se alcune aree dell'area di origine e della sovrapposizione di destinazione, memmove_s garantisce che i byte di origine originale nell'area di sovrapposizione vengono copiati prima di essere sovrascritto.

se dest oppure src è un puntatore null, o se la stringa di destinazione è troppo piccola, queste funzioni richiamare un gestore non valido di parametro, come descritto in Convalida dei parametri .Se l'esecuzione è consentita per continuare, ritorno di queste funzioni EINVAL e set errno in EINVAL.

Requisiti

routine

Intestazione di associazione

memmove_s

<string.h>

wmemmove_s

<wchar.h>

per informazioni di compatibilità aggiuntive, vedere compatibilità nell'introduzione.

Esempio

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

Output

Before: 0123456789
 After: 0012345789

Equivalente .NET Framework

System:: buffer:: BlockCopy

Vedere anche

Riferimenti

Modifica del buffer

_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