Condividi tramite


Assicurarsi che gli overload del modello

Numerose funzioni CRT sono state deprecate in favore di più recenti, versioni sicurezza-avanzate (ad esempio, strcpy_s è più sicura per sostituzione strcpy).CRT fornisce gli overload del modello per facilitare la transizione alle varianti più sicure.

Ad esempio, il codice genera un avviso in quanto strcpy è stato deprecato:

char szBuf[10];

strcpy(szBuf, "test"); // warning: deprecated

È possibile ignorare l'avviso.definire il simbolo _CRT_SECURE_NO_WARNINGS per eliminare l'avviso, o aggiornare il codice per utilizzare strcpy_s:

char szBuf[10];

strcpy_s(szBuf, 10, "test"); // security-enhanced _s function

Gli overload del modello vengono fornite scelte aggiuntive.definizione _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES a 1 abilita gli overload del modello funzioni CRT standard che chiamano il più varianti sicure automaticamente.se _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES è 1, non sono presenti modifiche al codice.In background, la chiamata a strcpy verrà modificato in una chiamata a strcpy_s con l'argomento di dimensione fornito automaticamente.

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

...

char szBuf[10];

strcpy(szBuf, "test"); // ==> strcpy_s(szBuf, 10, "test")

_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES non influisce sulle funzioni che accettano un conteggio, ad esempio strncpy.Per abilitare gli overload del modello per le funzioni di conteggio, definire _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT a 1.Prima di eseguire questa operazione, tuttavia, assicurarsi che il codice passi numero di caratteri, non la dimensione del buffer (un errore comune).Inoltre, il codice che in modo esplicito scrive un terminatore null alla fine del buffer dopo la chiamata di funzione non è necessaria se la variante sicura è denominata.Se è necessario un comportamento del troncamento, vedere _TRUNCATE.

[!NOTA]

la macro _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT richiede che _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES è anche definito come 1.se _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT viene definito come 1 e _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES viene definita come 0, l'applicazione non esegue alcuni overload del modello.

definizione _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES a 1 abilita gli overload del modello di dati variant sicure (nomi che terminano in “_s„).in questo caso, se _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES è 1, quindi una piccola modifica deve essere effettuata al codice originale:

#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1

...

char szBuf[10];

strcpy_s(szBuf, "test"); // ==> strcpy_s(szBuf, 10, "test")

Solo il nome della funzione deve essere modificato (aggiungendo i “_s„); l'overload del modello richiederà infatti di fornire argument di dimensione.

per impostazione predefinita, _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES e _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT essere definiti come 0 (disabilitato) e _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES viene definito come 1 (attivato.

Si noti che funzionamento di questi overload del modello solo per le matrici statiche.I buffer allocate in modo dinamico richiedono modifiche aggiuntive di codice sorgente.Deve rivedere gli esempi illustrati in precedenza:

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

...

char *szBuf = (char*)malloc(10);

strcpy(szBuf, "test"); // still deprecated; have to change to

// strcpy_s(szBuf, 10, "test");

E seguente:

#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1

...

char *szBuf = (char*)malloc(10);

strcpy_s(szBuf, "test"); // doesn't compile; have to change to

// strcpy_s(szBuf, 10, "test");

Vedere anche

Riferimenti

Funzionalità della libreria CRT

Concetti

Funzionalità di sicurezza in CRT