Condividi tramite


memmove_s, wmemmove_s

Sposta un buffer in un altro. Queste funzioni sono versioni di , wmemmovecon miglioramenti dellamemmove sicurezza, come descritto in Funzionalità di sicurezza in CRT.

Sintassi

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
Dimensioni del buffer di destinazione.

src
Oggetto di origine.

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

Valore restituito

Zero in caso di esito positivo, un codice di errore in caso di esito negativo

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

Osservazioni:

Copia count i byte di caratteri da src a dest. Se alcune parti dell'origine e delle aree di destinazione si sovrappongono, memmove_s assicura che i byte di origine originali nell'area sovrapposta vengano copiati prima di essere sovrascritti.

Se dest o se src è un puntatore Null o se la stringa di destinazione è troppo piccola, queste funzioni richiamano un gestore di parametri non validi, come descritto in Convalida dei parametri . Se l'esecuzione può continuare, queste funzioni restituiscono EINVAL e impostano errno su EINVAL.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Requisiti

Ciclo Intestazione obbligatoria
memmove_s <string.h>
wmemmove_s <wchar.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

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

Vedi anche

Manipolazione 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