Condividi tramite


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