共用方式為


警告 C28719

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

此警告表示正在使用一個已被禁止的函式,而它已有一個更強固或更安全的替代方案。

備註

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

程式代碼分析名稱:BANNED_API_USAGE(禁止的API使用)

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

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

此問題源於使用不安全的函式 strcpystrcpy 不會檢查目的地緩衝區是否夠大,足以容納源數據。

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

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

禁用函式

注意:此列表正在積極更新和改善

禁用 API 替換件 理由/附注
_fstrcat StringCbCatStringCbCatExStringCchCatStringCchCatEx 舊版 16 位遠指標實作
_fstrcpy StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 傳統 16 位元遠端指針實作
_fstrncat StringCbCatNStringCbCatNExStringCchCatNStringCchCatNEx 舊版 16 位遠指標實作
_fstrncpy strncpywcsncpy 舊版 16 位遠指標實作
_ftccat strcatwcscat 舊版 16 位遠指標實作
_ftccpy strcpywcscpy 舊版 16 位遠指標實作
_ftcscat strcatwcscat 舊版 16 位遠指標實作
_ftcscpy strcpywcscpy 舊版 16 位遠指標實作
_getts StringCbGetsStringCbGetsExStringCchGetsStringCchGetsExgets_s 數據沒有大小限制
_gettws gets_s 數據沒有大小限制
_getws _getws_s 數據沒有大小限制
_mbccat strcat_sStringCbCatStringCbCatExStringCchCatStringCchCatExstrlcat 數據沒有大小限制
_makepath _makepath_s 數據沒有大小限制
_mbscat _mbscat_s
_snprintf _snprintf_s 不會以 NULL 終止
_sntprintf StringCbPrintfStringCbPrintf_lStringCbPrintf_lExStringCbPrintfExStringCchPrintfStringCchPrintfEx 不會以 NULL 終止
_sntscanf _snscanf_s 沒有最大長度
_snwprintf _snwprintf_sStringCbPrintfStringCbPrintf_lStringCbPrintf_lExStringCbPrintfExStringCchPrintfStringCchPrintfEx 不會以 NULL 終止
_splitpath _splitpath_s 沒有邊界檢查
_stprintf StringCbPrintfStringCbPrintf_lStringCbPrintf_lExStringCbPrintfExStringCchPrintfStringCchPrintfEx 有限的錯誤偵測
_stscanf sscanf_s (需要格式字串變更) 沒有邊界檢查
_tccat strcat_sStringCbCatStringCbCatExStringCchCatStringCchCatExstrlcat 沒有邊界檢查
_tccpy strcpy_sStringCbCopyStringCbCopyExStringCchCopyStringCchCopyExstrlcpy 沒有邊界檢查
_tcscat StringCbCatStringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
_tcscpy StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 有限的錯誤偵測
_tcsncat StringCbLengthStringCchLengthUnalignedStringCbLengthUnalignedStringCchLength 沒有最大長度
_tcsncpy StringCbCopyNStringCbCopyNExStringCchCopyNStringCchCopyNEx 有限的錯誤偵測
_tmakepath _makepath_s 沒有邊界檢查
_tscanf scanf_s 對輸出沒有邊界檢查
_tsplitpath splitpath_swsplitpath_s 沒有界限檢查
_vsnprintf _vsnprintf_sStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 有限的錯誤偵測
_vsntprintf StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 有限的錯誤偵測
_vsnwprintf _vsnwprintf_sStringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfEx 有限的錯誤偵測
_vstprintf StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrinfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 沒有最大長度
_wmakepath _wmakepath_s 沒有界限檢查
_wsplitpath _wsplitpath_s 沒有邊界檢查
OemToCharW WideCharToMultiByte 沒有邊界檢查
StrCat StringCbCatStringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
StrCatA StringCbCatStringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
StrCatBuff StringCbCatStringCbCatExStringCchCatStringCchCatEx 沒有 NULL 終止符
StrCatBuffA StringCbCatStringCbCatExStringCchCatStringCchCatEx 無「NULL」結尾
StrCatBuffW StringCbCatStringCbCatExStringCchCatStringCchCatEx 無 NULL 終止符
StrCatChainW StringCbCatExStringCbCatNExStringCchCatExStringCchCatNEx 未使用 NULL 終止符
StrCatN StringCbCatStringCbCatExStringCbCatNStringCbCatNExStringCchCatStringCchCatExStringCchCatNStringCchCatNEx 沒有界限檢查
StrCatNA StringCbCatStringCbCatExStringCbCatNStringCbCatNExStringCchCatStringCchCatExStringCchCatNStringCchCatNEx 沒有邊界檢查
StrCatNW StringCbCatStringCbCatExStringCbCatNStringCbCatNExStringCchCatStringCchCatExStringCchCatNStringCchCatNEx 沒有界限檢查
StrCatW StringCbCatStringCbCatExStringCbCatNStringCbCatNExStringCchCatStringCchCatExStringCchCatNStringCchCatNEx 沒有邊界檢查
StrCpy StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 沒有邊界檢查
StrCpyA StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
StrCpyN StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 不會以 NULL 終止
StrCpyNA StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 不會以 NULL 終止
StrCpyNW StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 有限的錯誤檢查
strcpyW StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
StrCpyW StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
StrNCat StringCbCatNStringCbCatNExStringCchCatNStringCchCatNEx 有限的錯誤偵測
StrNCatA StringCbCatNStringCbCatNExStringCchCatNStringCchCatNEx 有限的錯誤偵測
StrNCatW StringCbCatNStringCbCatNExStringCchCatNStringCchCatNEx 有限的錯誤偵測
StrNCpy StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 不會以 NULL 終止
StrNCpyA StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 不會使用 NULL 作結尾
StrNCpyW StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 不會以 NULL 終止
gets gets_sfgetsStringCbGetsStringCbGetsExStringCchGetsStringCchGetsEx 有限的錯誤偵測;由 C11 標準取代
lstrcat StringCbCatStringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcatA StringCbCatStringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcatn StringCbCatStringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcatnA StringCbCatStringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcatnW StringCbCatStringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcatW StringCbCatStringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
lstrcpy StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 邊界檢查未實行
lstrcpyA StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 沒有邊界檢查
lstrcpyn StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 有限的錯誤偵測
lstrcpynA StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 有限的錯誤偵測
lstrcpynW StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 沒有邊界檢查
lstrcpyW StringCbCopyStringCbCopyExStringCchCopyStringCchCopyEx 沒有界限檢查
snscanf sscanf_s 沒有界限檢查
snwscanf swscanf_s 沒有邊界檢查
sprintf sprintf_s 有限的錯誤偵測
sprintfA sprintf_s 沒有邊界檢查
sprintfW swprintf_s 沒有邊界檢查
lstrncat StringCbCatStringCbCatExStringCchCatStringCchCatEx 有限的錯誤偵測
makepath
nsprintf sprintf_s 沒有錯誤偵測或界限檢查
strcat strcat_sStringCbCatStringCbCatExStringCchCatStringCchCatExstrlcat 有限的錯誤偵測
strcatA strcat_sStringCbCatStringCbCatExStringCchCatStringCchCatExstrlcat 有限的錯誤偵測
strcatW strcat_sStringCbCatStringCbCatExStringCchCatStringCchCatExstrlcat 有限的錯誤偵測
strcpy strcpy_sStringCbCopyStringCbCopyExStringCchCopyStringCchCopyExstrlcpy 沒有邊界檢查
strcpyA strcpy_sStringCbCopyStringCbCopyExStringCchCopyStringCchCopyExstrlcpy 沒有邊界檢查
strncat strncat_sStringCbCatNStringCbCatNExStringCchCatNStringCchCatNExstrlcat 有限的錯誤偵測
strncpy strncpy_sStringCbCopyNStringCbCopyNExStringCchCopyNStringCchCopyNExstrlcpy 有限的錯誤偵測
swprintf swprintf_s StringCbPrintfStringCbPrintf_lStringCbPrintf_lExStringCbPrintfStringCbPrintfEx 有限的錯誤偵測
ualstrcpyW strcpy_sStringCbCopyStringCbCopyExStringCchCopyStringCchCopyExstrlcpy 沒有邊界檢查
vsnprintf vsnprintf_sStringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 有限的錯誤偵測
vsprintf vsprintf_sStringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfExvasprintf 有限的錯誤偵測
vswprintf vswprintf_s
wcscat wcscat_sStringCbCatStringCbCatExStringCchCatStringCchCatExwcslcat 有限的錯誤偵測
wcscpy wcscpy_sStringCbCopyStringCbCopyExStringCchCopyStringCchCopyExwcslcpy 沒有邊界檢查
wcsncat wcsncat_swcslcat 有限的錯誤偵測
wcsncpy wcsncpy_sStringCbCopyNStringCbCopyNExStringCchCopyNStringCchCopyNExwcslcpy 有限的錯誤偵測
wnsprintf StringCbPrintfStringCbPrintf_lStringCbPrintf_lExStringCbPrintfExStringCchPrintfStringCchPrintfEx 無 NULL 字符終止
wnsprintfA StringCbPrintfStringCbPrintf_lStringCbPrintf_lExStringCbPrintfExStringCchPrintfStringCchPrintfEx 沒有 NULL 結尾
wsprintf StringCbPrintfStringCbPrintf_lStringCbPrintf_lExStringCbPrintfExStringCchPrintfStringCchPrintfEx 沒有 NULL 結尾符號
wsprintfA StringCbPrintfStringCbPrintf_lStringCbPrintf_lExStringCbPrintfExStringCchPrintfStringCchPrintfEx 沒有 NULL 終止符
wsprintfW StringCbPrintfStringCbPrintf_lStringCbPrintf_lExStringCbPrintfExStringCchPrintfStringCchPrintfEx NULL 無終止符
wvnsprintf StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 無 NULL 結束符
wvnsprintfA StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 無 NULL 結尾符
wvnsprintfW StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 無 NULL 結尾或結束符
wvsprintf StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 沒有 NULL 終止符
wvsprintfA StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 無空終止符
wvsprintfW StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 沒有 NULL 終止符