警告 C28726
禁止的 API 用法:“*function-name”不安全,已标记为已弃用。
此警告表明正在使用的函数已被禁止,并且具有更可靠或更安全的替换。 此特定错误表示被禁止的函数有可能溢出缓冲区。
注解
在以下示例后面可以找到此错误涵盖的所有受禁函数的列表、禁止这些函数的原因和建议的替换项。
代码分析名称:BANNED_API_USAGEL2
示例
下面的代码生成此警告:
void example_func()
{
char user_input[10];
scanf(“%s”, input); // scanf is banned for security purposes
}
这是因为使用了不安全的函数 scanf
。 scanf
对复制到缓冲区的数据的大小施加了任何限制。 若要解决此问题,可以使用 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 |