memmove_s
, wmemmove_s
Sposta un buffer in un altro. Queste funzioni sono versioni di , wmemmove
con 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