共用方式為


警告 C28719

禁用 API 使用方式: 函式名稱 不安全,且已標示為已被取代。

此警告表示正在使用已禁止且具有更強固或更安全的取代函式。

備註

此錯誤涵蓋的所有禁用函式清單、為何禁止它們,以及建議的取代專案可在下列範例之後找到。

程式代碼分析名稱:BANNED_API_USAGE

範例

下列程式代碼會產生此警告:

void example_func(PSTR src) 
{ 
    char dst[100]; 
    strcpy(dst, src);
} 

此問題源於使用 unsafe 函式 strcpy。 strcpy 不會檢查目的地緩衝區是否夠大,足以容納源數據。 若要修正此問題,我們可以使用 strcpy_s,C++11 更安全地取代此函式。 strcpy_s具有第三個參數(目的地緩衝區的大小),以確保只會複製許多位元組。 例如,下列程式代碼更安全:

void example_func(PSTR src) 
{ 
    char dst[100]; 
    strcpy_s(dst, sizeof(dst), src); 
}

禁用函式

注意:此清單正在積極更新和改善

禁用 API Replacement(s) 理由/附注
_fstrcat StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 舊版 16 位遠指標實作
_fstrcpy StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 舊版 16 位遠指標實作
_fstrncat StringCbCatN、 、 StringCbCatNExStringCchCatNStringCchCatNEx 舊版 16 位遠指標實作
_fstrncpy strncpy, wcsncpy 舊版 16 位遠指標實作
_ftccat strcat, wcscat 舊版 16 位遠指標實作
_ftccpy strcpy, wcscpy 舊版 16 位遠指標實作
_ftcscat strcat, wcscat 舊版 16 位遠指標實作
_ftcscpy strcpy, wcscpy 舊版 16 位遠指標實作
_getts StringCbGets、、 StringCbGetsExStringCchGetsStringCchGetsExgets_s 數據沒有大小限制
_gettws gets_s 數據沒有大小限制
_getws _getws_s 數據沒有大小限制
_mbccat strcat_s、、StringCbCatStringCbCatExStringCchCat、、StringCchCatExstrlcat 數據沒有大小限制
_makepath _makepath_s 數據沒有大小限制
_mbscat _mbscat_s
_snprintf _snprintf_s 不會以 NULL 終止
_sntprintf StringCbPrintf、、StringCbPrintf_lStringCbPrintf_lExStringCbPrintfEx、、StringCchPrintfStringCchPrintfEx 不會以 NULL 終止
_sntscanf _snscanf_s 沒有最大長度
_snwprintf _snwprintf_sStringCbPrintf、、StringCbPrintf_lExStringCbPrintf_lStringCbPrintfEx、、、 StringCchPrintfStringCchPrintfEx 不會以 NULL 終止
_splitpath _splitpath_s 沒有界限檢查
_stprintf StringCbPrintf、、StringCbPrintf_lStringCbPrintf_lExStringCbPrintfEx、、StringCchPrintfStringCchPrintfEx 有限的錯誤偵測
_stscanf sscanf_s (需要格式字串變更) 沒有界限檢查
_tccat strcat_s、、StringCbCatStringCbCatExStringCchCat、、StringCchCatExstrlcat 沒有界限檢查
_tccpy strcpy_s、、StringCbCopyStringCbCopyExStringCchCopy、、StringCchCopyExstrlcpy 沒有界限檢查
_tcscat StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
_tcscpy StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 有限的錯誤偵測
_tcsncat StringCbLength、 、 StringCchLengthUnalignedStringCbLengthUnalignedStringCchLength 沒有最大長度
_tcsncpy StringCbCopyN、 、 StringCbCopyNExStringCchCopyNStringCchCopyNEx 有限的錯誤偵測
_tmakepath _makepath_s 沒有界限檢查
_tscanf scanf_s 沒有輸出的界限檢查
_tsplitpath splitpath_s, wsplitpath_s 沒有界限檢查
_vsnprintf _vsnprintf_s、、 StringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 有限的錯誤偵測
_vsntprintf StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_l、、、 StringCchVPrintf_lExStringCchVPrintfEx 有限的錯誤偵測
_vsnwprintf _vsnwprintf_s、、 StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfEx 有限的錯誤偵測
_vstprintf StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrinfExStringCchVPrintfStringCchVPrintf_l、、、 StringCchVPrintf_lExStringCchVPrintfEx 沒有最大長度
_wmakepath _wmakepath_s 沒有界限檢查
_wsplitpath _wsplitpath_s 沒有界限檢查
OemToCharW WideCharToMultiByte 沒有界限檢查
StrCat StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
StrCatA StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
StrCatBuff StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 無 NULL 終止
StrCatBuffA StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 無 NULL 終止
StrCatBuffW StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 無 NULL 終止
StrCatChainW StringCbCatEx、 、 StringCbCatNExStringCchCatExStringCchCatNEx 無 NULL 終止
StrCatN StringCbCatStringCbCatExStringCbCatNStringCbCatNExStringCchCatStringCchCatEx、、、 StringCchCatNStringCchCatNEx 沒有界限檢查
StrCatNA StringCbCatStringCbCatExStringCbCatNStringCbCatNExStringCchCatStringCchCatEx、、、 StringCchCatNStringCchCatNEx 沒有界限檢查
StrCatNW StringCbCatStringCbCatExStringCbCatNStringCbCatNExStringCchCatStringCchCatEx、、、 StringCchCatNStringCchCatNEx 沒有界限檢查
StrCatW StringCbCatStringCbCatExStringCbCatNStringCbCatNExStringCchCatStringCchCatEx、、、 StringCchCatNStringCchCatNEx 沒有界限檢查
StrCpy StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
StrCpyA StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
StrCpyN StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 不會以 NULL 終止
StrCpyNA StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 不會以 NULL 終止
StrCpyNW StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 有限的錯誤檢查
strcpyW StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
StrCpyW StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
StrNCat StringCbCatN、 、 StringCbCatNExStringCchCatNStringCchCatNEx 有限的錯誤偵測
StrNCatA StringCbCatN、 、 StringCbCatNExStringCchCatNStringCchCatNEx 有限的錯誤偵測
StrNCatW StringCbCatN、 、 StringCbCatNExStringCchCatNStringCchCatNEx 有限的錯誤偵測
StrNCpy StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 不會以 NULL 終止
StrNCpyA StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 不會以 NULL 終止
StrNCpyW StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 不會以 NULL 終止
gets gets_s、、fgetsStringCbGetsStringCbGetsEx、、StringCchGetsStringCchGetsEx 有限的錯誤偵測;由 C11 標準取代
lstrcat StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcatA StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcatn StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcatnA StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcatnW StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcatW StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcpy StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
lstrcpyA StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
lstrcpyn StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 有限的錯誤偵測
lstrcpynA StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 有限的錯誤偵測
lstrcpynW StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
lstrcpyW StringCbCopy、 、 StringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
snscanf sscanf_s 沒有界限檢查
snwscanf swscanf_s 沒有界限檢查
sprintf sprintf_s 有限的錯誤偵測
sprintfA sprintf_s 沒有界限檢查
sprintfW swprintf_s 沒有界限檢查
lstrncat StringCbCat、 、 StringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
makepath
nsprintf sprintf_s 沒有錯誤偵測或界限檢查
strcat strcat_s、、StringCbCatStringCbCatExStringCchCat、、StringCchCatExstrlcat 有限的錯誤偵測
strcatA strcat_s、、StringCbCatStringCbCatExStringCchCat、、StringCchCatExstrlcat 有限的錯誤偵測
strcatW strcat_s、、StringCbCatStringCbCatExStringCchCat、、StringCchCatExstrlcat 有限的錯誤偵測
strcpy strcpy_s、、StringCbCopyStringCbCopyExStringCchCopy、、StringCchCopyExstrlcpy 沒有界限檢查
strcpyA strcpy_s、、StringCbCopyStringCbCopyExStringCchCopy、、StringCchCopyExstrlcpy 沒有界限檢查
strncat strncat_s、、StringCbCatNStringCbCatNExStringCchCatN、、StringCchCatNExstrlcat 有限的錯誤偵測
strncpy strncpy_s、、StringCbCopyNStringCbCopyNExStringCchCopyN、、StringCchCopyNExstrlcpy 有限的錯誤偵測
swprintf swprintf_sStringCbPrintf、、StringCbPrintf_lStringCbPrintf_lExStringCbPrintfStringCbPrintfEx 有限的錯誤偵測
ualstrcpyW strcpy_s、、StringCbCopyStringCbCopyExStringCchCopy、、StringCchCopyExstrlcpy 沒有界限檢查
vsnprintf vsnprintf_sStringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 有限的錯誤偵測
vsprintf vsprintf_sStringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_l、、StringCchVPrintf_lEx、、 StringCchVPrintfExvasprintf 有限的錯誤偵測
vswprintf vswprintf_s
wcscat wcscat_s、、StringCbCatStringCbCatExStringCchCat、、StringCchCatExwcslcat 有限的錯誤偵測
wcscpy wcscpy_s、、StringCbCopyStringCbCopyExStringCchCopy、、StringCchCopyExwcslcpy 沒有界限檢查
wcsncat wcsncat_s, wcslcat 有限的錯誤偵測
wcsncpy wcsncpy_s、、StringCbCopyNStringCbCopyNExStringCchCopyN、、StringCchCopyNExwcslcpy 有限的錯誤偵測
wnsprintf StringCbPrintf、、StringCbPrintf_lStringCbPrintf_lExStringCbPrintfEx、、StringCchPrintfStringCchPrintfEx 無 NULL 終止
wnsprintfA StringCbPrintf、、StringCbPrintf_lStringCbPrintf_lExStringCbPrintfEx、、StringCchPrintfStringCchPrintfEx 無 NULL 終止
wsprintf StringCbPrintf、、StringCbPrintf_lStringCbPrintf_lExStringCbPrintfEx、、StringCchPrintfStringCchPrintfEx 無 NULL 終止
wsprintfA StringCbPrintf、、StringCbPrintf_lStringCbPrintf_lExStringCbPrintfEx、、StringCchPrintfStringCchPrintfEx 無 NULL 終止
wsprintfW StringCbPrintf、、StringCbPrintf_lStringCbPrintf_lExStringCbPrintfEx、、StringCchPrintfStringCchPrintfEx 無 NULL 終止
wvnsprintf StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_l、、、 StringCchVPrintf_lExStringCchVPrintfEx 無 NULL 終止
wvnsprintfA StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_l、、、 StringCchVPrintf_lExStringCchVPrintfEx 無 NULL 終止
wvnsprintfW StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_l、、、 StringCchVPrintf_lExStringCchVPrintfEx 無 NULL 終止
wvsprintf StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_l、、、 StringCchVPrintf_lExStringCchVPrintfEx 無 NULL 終止
wvsprintfA StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_l、、、 StringCchVPrintf_lExStringCchVPrintfEx 無 NULL 終止
wvsprintfW StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_l、、、 StringCchVPrintf_lExStringCchVPrintfEx 無 NULL 終止