Avviso C28719
Utilizzo API vietato: la funzione non è sicura ed è stata contrassegnata come deprecata.
Questo avviso indica che viene usata una funzione che è stata vietata e che ha una sostituzione più affidabile o sicura.
Osservazioni
Un elenco di tutte le funzioni escluse coperte da questo errore, il motivo per cui sono vietate e le sostituzioni consigliate sono disponibili dopo l'esempio seguente.
Nome dell'analisi del codice: BANNED_API_USAGE
Esempio
Il codice seguente genera questo avviso:
void example_func(PSTR src)
{
char dst[100];
strcpy(dst, src);
}
Questo problema deriva dall'uso della funzione non sicura strcpy
.
strcpy
non verifica se il buffer di destinazione è sufficientemente grande da adattare i dati di origine.
Per risolvere questo problema, è possibile usare strcpy_s, la sostituzione più sicura di C++11 a questa funzione.
strcpy_s
ha un terzo parametro (le dimensioni del buffer di destinazione) per assicurarsi che vengano copiati solo molti byte. Ad esempio, il codice seguente è più sicuro:
void example_func(PSTR src)
{
char dst[100];
strcpy_s(dst, sizeof(dst), src);
}
Funzioni escluse
NOTA: questo elenco viene aggiornato e migliorato attivamente
API vietate | Sostituzioni | Razionale/Note |
---|---|---|
_fstrcat |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Implementazione legacy del puntatore lontano a 16 bit |
_fstrcpy |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Implementazione legacy del puntatore lontano a 16 bit |
_fstrncat |
StringCbCatN , StringCbCatNEx , StringCchCatN , StringCchCatNEx |
Implementazione legacy del puntatore a lungo raggio a 16 bit |
_fstrncpy |
strncpy , wcsncpy |
Implementazione del vecchio puntatore lontano a 16 bit |
_ftccat |
strcat , wcscat |
Implementazione legacy del puntatore lontano a 16 bit |
_ftccpy |
strcpy , wcscpy |
Implementazione legacy del puntatore lontano a 16 bit |
_ftcscat |
strcat , wcscat |
Implementazione legacy del puntatore lontano a 16 bit |
_ftcscpy |
strcpy , wcscpy |
Implementazione legacy del puntatore lontano a 16 bit |
_getts |
StringCbGets , StringCbGetsEx , StringCchGets , StringCchGetsEx , gets_s |
Nessun limite di dimensioni per i dati |
_gettws |
gets_s |
Nessun limite di dimensioni per i dati |
_getws |
_getws_s |
Nessun limite di dimensioni per i dati |
_mbccat |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , strlcat |
Nessun limite di dimensioni per i dati |
_makepath |
_makepath_s |
Nessun limite di dimensioni per i dati |
_mbscat |
_mbscat_s |
|
_snprintf |
_snprintf_s |
Non termina con carattere NULL |
_sntprintf |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
Non termina con un carattere NULL |
_sntscanf |
_snscanf_s |
Nessuna lunghezza massima |
_snwprintf |
_snwprintf_s , StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
Non termina con un carattere NULL |
_splitpath |
_splitpath_s |
Nessun controllo dei limiti |
_stprintf |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
Rilevamento limitato degli errori |
_stscanf |
sscanf_s (richiede modifiche alla stringa di formato) |
Nessun controllo dei limiti |
_tccat |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , strlcat |
Nessun controllo dei limiti |
_tccpy |
strcpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , strlcpy |
Nessun controllo dei limiti |
_tcscat |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Rilevamento limitato degli errori |
_tcscpy |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Rilevamento degli errori limitato |
_tcsncat |
StringCbLength , StringCchLength , UnalignedStringCbLength , UnalignedStringCchLength |
Nessuna lunghezza massima |
_tcsncpy |
StringCbCopyN , StringCbCopyNEx , StringCchCopyN , StringCchCopyNEx |
Rilevamento degli errori limitato |
_tmakepath |
_makepath_s |
Nessun controllo dei limiti |
_tscanf |
scanf_s |
Nessun controllo dei limiti per le uscite |
_tsplitpath |
splitpath_s , wsplitpath_s |
Nessun controllo dei limiti |
_vsnprintf |
_vsnprintf_s , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
Rilevamento di errori in modo limitato |
_vsntprintf |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
Rilevamento degli errori limitato |
_vsnwprintf |
_vsnwprintf_s , StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx |
Individuazione errori limitata |
_vstprintf |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrinfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
Nessuna lunghezza massima |
_wmakepath |
_wmakepath_s |
Nessun controllo dei limiti |
_wsplitpath |
_wsplitpath_s |
Nessun controllo dei limiti |
OemToCharW |
WideCharToMultiByte |
Nessun controllo dei limiti |
StrCat |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Rilevamento degli errori limitato |
StrCatA |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Rilevamento degli errori limitato |
StrCatBuff |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Nessuna terminazione con NULL |
StrCatBuffA |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Nessuna terminazione con NULL |
StrCatBuffW |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Nessuna terminazione NULL |
StrCatChainW |
StringCbCatEx , StringCbCatNEx , StringCchCatEx , StringCchCatNEx |
Nessuna terminazione di tipo null |
StrCatN |
StringCbCat , StringCbCatEx , StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , StringCchCatN , StringCchCatNEx |
Nessun controllo dei limiti |
StrCatNA |
StringCbCat , StringCbCatEx , StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , StringCchCatN , StringCchCatNEx |
Nessun controllo dei limiti |
StrCatNW |
StringCbCat , StringCbCatEx , StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , StringCchCatN , StringCchCatNEx |
Nessun controllo dei limiti |
StrCatW |
StringCbCat , StringCbCatEx , StringCbCatN , StringCbCatNEx , StringCchCat , StringCchCatEx , StringCchCatN , StringCchCatNEx |
Nessun controllo dei limiti |
StrCpy |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Nessun controllo dei limiti |
StrCpyA |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Nessun controllo dei limiti |
StrCpyN |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Non termina con un carattere nullo |
StrCpyNA |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Non termina con carattere NULL |
StrCpyNW |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Controllo degli errori limitato |
strcpyW |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Nessun controllo dei limiti |
StrCpyW |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Nessun controllo dei limiti |
StrNCat |
StringCbCatN , StringCbCatNEx , StringCchCatN , StringCchCatNEx |
Rilevamento degli errori limitato |
StrNCatA |
StringCbCatN , StringCbCatNEx , StringCchCatN , StringCchCatNEx |
Rilevamento degli errori limitato |
StrNCatW |
StringCbCatN , StringCbCatNEx , StringCchCatN , StringCchCatNEx |
Rilevamento degli errori limitato |
StrNCpy |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Non termina con un carattere NULL. |
StrNCpyA |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Non termina con NULL |
StrNCpyW |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Non termina con un carattere NULL |
gets |
gets_s , fgets , StringCbGets , StringCbGetsEx , StringCchGets , StringCchGetsEx |
Rilevamento degli errori limitato; deprecato dallo standard C11 |
lstrcat |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Rilevamento degli errori limitato |
lstrcatA |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Rilevamento degli errori limitato |
lstrcatn |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Rilevamento degli errori limitato |
lstrcatnA |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Rilevamento limitato degli errori. |
lstrcatnW |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Rilevamento limitato degli errori |
lstrcatW |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Rilevamento degli errori limitato |
lstrcpy |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Nessun controllo dei limiti |
lstrcpyA |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Nessun controllo dei limiti |
lstrcpyn |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Rilevamento degli errori limitato |
lstrcpynA |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Rilevamento degli errori limitato |
lstrcpynW |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Nessun controllo dei limiti |
lstrcpyW |
StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx |
Nessun controllo dei limiti |
snscanf |
sscanf_s |
Nessun controllo dei limiti |
snwscanf |
swscanf_s |
Nessun controllo dei limiti |
sprintf |
sprintf_s |
Rilevamento degli errori limitato |
sprintfA |
sprintf_s |
Nessun controllo dei limiti |
sprintfW |
swprintf_s |
Nessun controllo dei limiti |
lstrncat |
StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx |
Rilevamento degli errori limitato |
makepath |
||
nsprintf |
sprintf_s |
Nessun rilevamento degli errori o controllo dei limiti |
strcat |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , strlcat |
Rilevamento limitato degli errori |
strcatA |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , strlcat |
Rilevamento degli errori limitato |
strcatW |
strcat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , strlcat |
Rilevamento degli errori limitato |
strcpy |
strcpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , strlcpy |
Nessun controllo dei limiti |
strcpyA |
strcpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , strlcpy |
Nessun controllo dei limiti |
strncat |
strncat_s , StringCbCatN , StringCbCatNEx , StringCchCatN , StringCchCatNEx , strlcat |
Rilevamento degli errori limitato |
strncpy |
strncpy_s , StringCbCopyN , StringCbCopyNEx , StringCchCopyN , StringCchCopyNEx , strlcpy |
Rilevamento degli errori limitato |
swprintf |
swprintf_s
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintf , StringCbPrintfEx |
Rilevamento degli errori limitato |
ualstrcpyW |
strcpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , strlcpy |
Nessun controllo dei limiti |
vsnprintf |
vsnprintf_s , StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
Rilevamento limitato degli errori |
vsprintf |
vsprintf_s , StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx , vasprintf |
Rilevamento degli errori limitato |
vswprintf |
vswprintf_s |
|
wcscat |
wcscat_s , StringCbCat , StringCbCatEx , StringCchCat , StringCchCatEx , wcslcat |
Rilevamento degli errori limitato |
wcscpy |
wcscpy_s , StringCbCopy , StringCbCopyEx , StringCchCopy , StringCchCopyEx , wcslcpy |
Nessun controllo dei limiti |
wcsncat |
wcsncat_s , wcslcat |
Rilevamento degli errori limitato |
wcsncpy |
wcsncpy_s , StringCbCopyN , StringCbCopyNEx , StringCchCopyN , StringCchCopyNEx , wcslcpy |
Rilevamento degli errori limitato |
wnsprintf |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
Nessuna terminazione con NULL |
wnsprintfA |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
Nessuna terminazione con NULL |
wsprintf |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
Assenza di terminazione con NULL |
wsprintfA |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
Nessuna terminazione NULL |
wsprintfW |
StringCbPrintf , StringCbPrintf_l , StringCbPrintf_lEx , StringCbPrintfEx , StringCchPrintf , StringCchPrintfEx |
Nessuna terminazione NULL |
wvnsprintf |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
Assenza di terminazione con NULL |
wvnsprintfA |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
Nessuna terminazione NULL |
wvnsprintfW |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
Nessuna terminazione NULL |
wvsprintf |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
Nessuna terminazione con NULL |
wvsprintfA |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
Nessuna terminazione NULL |
wvsprintfW |
StringCbVPrintf , StringCbVPrintf_l , StringCbVPrintf_lEx , StringCbVPrintfEx , StringCchVPrintf , StringCchVPrintf_l , StringCchVPrintf_lEx , StringCchVPrintfEx |
Nessuna terminazione NULL |