警告 C28719

禁止的 API 用法:函数名称 不安全,并且已标记为已弃用。

此警告指出一个函数被禁止使用,并且有更可靠或更安全的替代方案。

言论

可以在下面的示例后找到此错误涵盖的所有被禁函数列表、其被禁止的原因,以及推荐的替代项。

代码分析名称:BANNED_API_USAGE

以下代码生成此警告:

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_sStringCbPrintfStringCbPrintf_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 不以 NULL 结尾
wvsprintfW StringCbVPrintfStringCbVPrintf_lStringCbVPrintf_lExStringCbVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lExStringCchVPrintfEx 不以 NULL 结尾