memcpy_s
, wmemcpy_s
Copia i byte tra i buffer. Queste funzioni sono versioni di , wmemcpy
con miglioramenti dellamemcpy
sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
errno_t memcpy_s(
void *dest,
size_t destSize,
const void *src,
size_t count
);
errno_t wmemcpy_s(
wchar_t *dest,
size_t destSize,
const wchar_t *src,
size_t count
);
Parametri
dest
Nuovo buffer.
destSize
Dimensioni del buffer di destinazione, in byte per memcpy_s
e caratteri wide (wchar_t
) per wmemcpy_s
.
src
Buffer da cui copiare.
count
Numero di caratteri da copiare.
Valore restituito
Zero se con esito positivo; un codice di errore in caso di errore.
Condizioni di errore
dest |
destSize |
src |
count |
Valore restituito | Contenuto di dest |
---|---|---|---|---|---|
qualsiasi | qualsiasi | qualsiasi | 0 | 0 | Non modificato |
NULL |
qualsiasi | qualsiasi | non zero | EINVAL |
Non modificato |
qualsiasi | qualsiasi | NULL |
non zero | EINVAL |
dest è azzerato |
qualsiasi | < count |
qualsiasi | non zero | ERANGE |
dest è azzerato |
Osservazioni:
memcpy_s
copia count
i byte da src
a dest
; wmemcpy_s
copia count
caratteri wide. Se le aree di origine e di destinazione si sovrappongono, il comportamento di memcpy_s
non è definito. Usare memmove_s
per gestire le aree di sovrapposizione.
Queste funzioni convalidano i relativi parametri. Se count
è diverso da zero e dest
o src
è un puntatore Null o destSize
è minore di count
, queste funzioni richiamano il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono EINVAL
o ERANGE
e impostano errno
sul valore restituito.
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 |
---|---|
memcpy_s |
<memory.h> oppure <string.h> |
wmemcpy_s |
<wchar.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// crt_memcpy_s.c
// Copy memory in a more secure way.
#include <memory.h>
#include <stdio.h>
int main()
{
int a1[10], a2[100], i;
errno_t err;
// Populate a2 with squares of integers
for (i = 0; i < 100; i++)
{
a2[i] = i*i;
}
// Tell memcpy_s to copy 10 ints (40 bytes), giving
// the size of the a1 array (also 40 bytes).
err = memcpy_s(a1, sizeof(a1), a2, 10 * sizeof (int) );
if (err)
{
printf("Error executing memcpy_s.\n");
}
else
{
for (i = 0; i < 10; i++)
printf("%d ", a1[i]);
}
printf("\n");
}
0 1 4 9 16 25 36 49 64 81
Vedi anche
Manipolazione del buffer
_memccpy
memchr
, wmemchr
memcmp
, wmemcmp
memmove
, wmemmove
memset
, wmemset
strcpy
, wcscpy
, _mbscpy
strncpy
, _strncpy_l
, wcsncpy
, _wcsncpy_l
, _mbsncpy
_mbsncpy_l
strncpy_s
, _strncpy_s_l
, wcsncpy_s
, _wcsncpy_s_l
, _mbsncpy_s
_mbsncpy_s_l