Condividi tramite


Avviso C28719

Utilizzo API escluse: il nome della funzione non è sicuro ed è stato contrassegnato come deprecato.

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 unsafe 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 escluse Sostituzioni Razionale/Note
_fstrcat StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Implementazione legacy del puntatore lontano a 16 bit
_fstrcpy StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Implementazione legacy del puntatore lontano a 16 bit
_fstrncat StringCbCatN, StringCbCatNEx, StringCchCatNStringCchCatNEx Implementazione legacy del puntatore lontano a 16 bit
_fstrncpy strncpy, wcsncpy Implementazione legacy del 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, StringCchGetsExgets_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, StringCchCatExstrlcat 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 NULL
_sntprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx Non termina NULL
_sntscanf _snscanf_s Nessuna lunghezza massima
_snwprintf _snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lExStringCbPrintfEx, , StringCchPrintfStringCchPrintfEx Non termina NULL
_splitpath _splitpath_s Nessun controllo dei limiti
_stprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx Rilevamento degli errori limitato
_stscanf sscanf_s (richiede modifiche alla stringa di formato) Nessun controllo dei limiti
_tccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExstrlcat Nessun controllo dei limiti
_tccpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyExstrlcpy Nessun controllo dei limiti
_tcscat StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Rilevamento degli errori limitato
_tcscpy StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Rilevamento degli errori limitato
_tcsncat StringCbLength, StringCchLength, UnalignedStringCbLengthUnalignedStringCchLength Nessuna lunghezza massima
_tcsncpy StringCbCopyN, StringCbCopyNEx, StringCchCopyNStringCchCopyNEx Rilevamento degli errori limitato
_tmakepath _makepath_s Nessun controllo dei limiti
_tscanf scanf_s Nessun controllo dei limiti per gli output
_tsplitpath splitpath_s, wsplitpath_s Nessun controllo dei limiti
_vsnprintf _vsnprintf_s, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx Rilevamento degli errori limitato
_vsntprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfExStringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx Rilevamento degli errori limitato
_vsnwprintf _vsnwprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lExStringCbVPrintfEx Rilevamento degli errori limitato
_vstprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrinfExStringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx 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, StringCchCatStringCchCatEx Rilevamento degli errori limitato
StrCatA StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Rilevamento degli errori limitato
StrCatBuff StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Nessuna terminazione NULL
StrCatBuffA StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Nessuna terminazione NULL
StrCatBuffW StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Nessuna terminazione NULL
StrCatChainW StringCbCatEx, StringCbCatNEx, StringCchCatExStringCchCatNEx Nessuna terminazione NULL
StrCatN StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNExStringCchCat, StringCchCatEx, , StringCchCatNStringCchCatNEx Nessun controllo dei limiti
StrCatNA StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNExStringCchCat, StringCchCatEx, , StringCchCatNStringCchCatNEx Nessun controllo dei limiti
StrCatNW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNExStringCchCat, StringCchCatEx, , StringCchCatNStringCchCatNEx Nessun controllo dei limiti
StrCatW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNExStringCchCat, StringCchCatEx, , StringCchCatNStringCchCatNEx Nessun controllo dei limiti
StrCpy StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Nessun controllo dei limiti
StrCpyA StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Nessun controllo dei limiti
StrCpyN StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Non termina NULL
StrCpyNA StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Non termina NULL
StrCpyNW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Controllo degli errori limitato
strcpyW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Nessun controllo dei limiti
StrCpyW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Nessun controllo dei limiti
StrNCat StringCbCatN, StringCbCatNEx, StringCchCatNStringCchCatNEx Rilevamento degli errori limitato
StrNCatA StringCbCatN, StringCbCatNEx, StringCchCatNStringCchCatNEx Rilevamento degli errori limitato
StrNCatW StringCbCatN, StringCbCatNEx, StringCchCatNStringCchCatNEx Rilevamento degli errori limitato
StrNCpy StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Non termina NULL
StrNCpyA StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Non termina NULL
StrNCpyW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Non termina NULL
gets gets_s, fgets, StringCbGets, StringCbGetsEx, StringCchGetsStringCchGetsEx Rilevamento degli errori limitato; deprecato dallo standard C11
lstrcat StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Rilevamento degli errori limitato
lstrcatA StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Rilevamento degli errori limitato
lstrcatn StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Rilevamento degli errori limitato
lstrcatnA StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Rilevamento degli errori limitato
lstrcatnW StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Rilevamento degli errori limitato
lstrcatW StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx Rilevamento degli errori limitato
lstrcpy StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Nessun controllo dei limiti
lstrcpyA StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Nessun controllo dei limiti
lstrcpyn StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Rilevamento degli errori limitato
lstrcpynA StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Rilevamento degli errori limitato
lstrcpynW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx Nessun controllo dei limiti
lstrcpyW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 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, StringCchCatStringCchCatEx Rilevamento degli errori limitato
makepath
nsprintf sprintf_s Nessun rilevamento degli errori o controllo dei limiti
strcat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExstrlcat Rilevamento degli errori limitato
strcatA strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExstrlcat Rilevamento degli errori limitato
strcatW strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExstrlcat Rilevamento degli errori limitato
strcpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyExstrlcpy Nessun controllo dei limiti
strcpyA strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyExstrlcpy Nessun controllo dei limiti
strncat strncat_s, StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNExstrlcat Rilevamento degli errori limitato
strncpy strncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNExstrlcpy Rilevamento degli errori limitato
swprintf swprintf_sStringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfStringCbPrintfEx Rilevamento degli errori limitato
ualstrcpyW strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyExstrlcpy Nessun controllo dei limiti
vsnprintf vsnprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfExStringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx Rilevamento degli errori limitato
vsprintf vsprintf_sStringCbVPrintf_l, StringCbVPrintf, , StringCbVPrintf_lEx, StringCbVPrintfExStringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, , StringCchVPrintfExvasprintf Rilevamento degli errori limitato
vswprintf vswprintf_s
wcscat wcscat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExwcslcat Rilevamento degli errori limitato
wcscpy wcscpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyExwcslcpy Nessun controllo dei limiti
wcsncat wcsncat_s, wcslcat Rilevamento degli errori limitato
wcsncpy wcsncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNExwcslcpy Rilevamento degli errori limitato
wnsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx Nessuna terminazione NULL
wnsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx Nessuna terminazione NULL
wsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx Nessuna terminazione NULL
wsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx Nessuna terminazione NULL
wsprintfW StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx Nessuna terminazione NULL
wvnsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfExStringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx Nessuna terminazione NULL
wvnsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfExStringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx Nessuna terminazione NULL
wvnsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfExStringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx Nessuna terminazione NULL
wvsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfExStringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx Nessuna terminazione NULL
wvsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfExStringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx Nessuna terminazione NULL
wvsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfExStringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lExStringCchVPrintfEx Nessuna terminazione NULL