警告 C28726

禁止的 API 用法:“*function-name”不安全,已标记为已弃用。

此警告表明正在使用的函数已被禁止,并且具有更可靠或更安全的替换。 此特定错误表示被禁止的函数有可能溢出缓冲区。

注解

在以下示例后面可以找到此错误涵盖的所有受禁函数的列表、禁止这些函数的原因和建议的替换项。

代码分析名称:BANNED_API_USAGEL2

示例

下面的代码生成此警告:

void example_func() 
{ 
    char user_input[10]; 
    scanf(“%s”, input); // scanf is banned for security purposes 
} 

这是因为使用了不安全的函数 scanfscanf 对复制到缓冲区的数据的大小施加了任何限制。 若要解决此问题,可以使用 scanf_s,这是此函数的更安全的替代项。 scanf_s 要求开发人员指定要复制的字节数。 scanf_s 将确保仅复制多个字节。 例如,以下代码更安全:

void example_func() 
{ 
    char user_input[10]; 
    scanf_s(“%9s”, input, sizeof(input)); // 9 bytes leaves room for the \0 byte at the end  
} 

禁止的函数

注意:此列表正在积极更新和改进

禁止的 API 替换 () 理由/备注
_itoa _itoa_s 不以 NULL 结尾
_i64toa _i64toa_s 不以 NULL 结尾
_i64tow _i64tow_s 不以 NULL 结尾
_mbccpy _mbccpy_s
_mbscpy _mbscpy_s
_mbsnbcpy _mbsnbcpy_s
_mbsnbcat _mbsnbcat_s
_mbsncat _mbsncat_s
_mbsncpy _mbsncpy_s
_mbstok _mbstok_s
_snscanf _snscanf_s
_snwscanf _snwscanf_s
_ui64toa ui64toa_s
_ui64tow _ui64tow_s
_ultoa _ultoa_s
CharToOemA
CharToOemBuffA
CharToOemBuffW
CharToOemW
OemToCharA
OemToCharBuffA
OemToCharBuffW
scanf scanf_s 有限的错误检测
sscanf sscanf_s 有限的错误检测
wmemcpy wmemcpy_s 有限的错误检测
wnsprintfW
wscanf wscanf_s