memcpy_s, wmemcpy_s
Copia i byte tra buffer.queste sono versioni di memcpy, wmemcpy con i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in CRT.
errno_t memcpy_s(
void *dest,
size_t numberOfElements,
const void *src,
size_t count
);
errno_t wmemcpy_s(
wchar_t *dest,
size_t numberOfElements,
const wchar_t *src,
size_t count
);
Parametri
dest
nuovo buffer.numberOfElements
Dimensione del buffer di destinazione.src
Buffer da.count
numero di caratteri da 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 |
dest verrà azzerato esterno |
qualsiasi |
< count |
qualsiasi |
ERANGE |
dest verrà azzerato esterno |
Note
memcpy_s copie count byte da src in dest; wmemcpy_s copie count caratteri di tipo " wide " (byte).se il database di origine e la sovrapposizione di destinazione, il comportamento di memcpy_s è definito.utilizzo memmove_s per gestire le aree sovrapposti.
Queste funzioni convalidano i relativi parametri.se dest o src è un puntatore null, o numberOfElements è troppo piccole per il buffer, queste funzioni richiamare il 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 |
---|---|
memcpy_s |
<memory.h> o <string.h> |
wmemcpy_s |
<wchar.h> |
per informazioni di compatibilità aggiuntive, vedere compatibilità nell'introduzione.
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");
}
Equivalente .NET Framework
Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.
Vedere anche
Riferimenti
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l