警告 C28719
禁止されている API の使用: 関数名は安全でなくなり、非推奨とマークされています。
この警告は、禁止になっている関数が使用されており、より堅牢または安全な代替関数があることを示します。
解説
このエラーの対象となるすべての禁止されている関数の一覧、禁止されている理由、および推奨される代替は、次の例の後にあります。
コード分析名: BANNED_API_USAGE
例
この警告が発生するコード例を次に示します。
void example_func(PSTR src)
{
char dst[100];
strcpy(dst, src);
}
この問題は、安全でない関数 strcpy の使用に起因します。 strcpy は、コピー先のバッファーがソース データに適合するのに十分な大きさかどうかをチェックしません。 この問題を解決するには、この関数に対して strcpy_s、C++11 の安全な置き換えを使用できます。 strcpy_s には、大量のバイトがコピーされることのみを確認する 3 番目のパラメーター (コピー先バッファーのサイズ) があります。 たとえば、次のようなコードがより安全です。
void example_func(PSTR src)
{
char dst[100];
strcpy_s(dst, sizeof(dst), src);
}
禁止されている関数
注: このリストはアクティブに更新され、改善されています
禁止されている API | 置換 | 根拠/注意事項 |
---|---|---|
_fstrcat |
従来の 16 ビット far ポインターの実装 | |
_fstrcpy |
従来の 16 ビット far ポインターの実装 | |
_fstrncat |
従来の 16 ビット far ポインターの実装 | |
_fstrncpy |
$ | 従来の 16 ビット far ポインターの実装 |
_ftccat |
$ | 従来の 16 ビット far ポインターの実装 |
_ftccpy |
$ | 従来の 16 ビット far ポインターの実装 |
_ftcscat |
$ | 従来の 16 ビット far ポインターの実装 |
_ftcscpy |
$ | 従来の 16 ビット far ポインターの実装 |
_getts |
データのサイズ制限なし | |
_gettws |
gets_s |
データのサイズ制限なし |
_getws |
_getws_s |
データのサイズ制限なし |
_mbccat |
データのサイズ制限なし | |
_makepath |
_makepath_s |
データのサイズ制限なし |
_mbscat |
_mbscat_s |
|
_snprintf |
_snprintf_s |
NULL 終了しない |
_sntprintf |
NULL 終了しない | |
_sntscanf |
_snscanf_s |
最大長なし |
_snwprintf |
NULL 終了しない | |
_splitpath |
_splitpath_s |
境界チェックなし |
_stprintf |
制限付きエラー検出 | |
_stscanf |
sscanf_s (書式指定文字列の変更が必要) |
境界チェックなし |
_tccat |
境界チェックなし | |
_tccpy |
境界チェックなし | |
_tcscat |
制限付きエラー検出 | |
_tcscpy |
制限付きエラー検出 | |
_tcsncat |
最大長なし | |
_tcsncpy |
制限付きエラー検出 | |
_tmakepath |
_makepath_s |
境界チェックなし |
_tscanf |
scanf_s |
出力の境界チェックなし |
_tsplitpath |
$ | 境界チェックなし |
_vsnprintf |
制限付きエラー検出 | |
_vsntprintf |
制限付きエラー検出 | |
_vsnwprintf |
制限付きエラー検出 | |
_vstprintf |
最大長なし | |
_wmakepath |
_wmakepath_s |
境界チェックなし |
_wsplitpath |
_wsplitpath_s |
境界チェックなし |
OemToCharW |
WideCharToMultiByte |
境界チェックなし |
StrCat |
制限付きエラー検出 | |
StrCatA |
制限付きエラー検出 | |
StrCatBuff |
NULL 終了なし | |
StrCatBuffA |
NULL 終了なし | |
StrCatBuffW |
NULL 終了なし | |
StrCatChainW |
NULL 終了なし | |
StrCatN |
境界チェックなし | |
StrCatNA |
境界チェックなし | |
StrCatNW |
境界チェックなし | |
StrCatW |
境界チェックなし | |
StrCpy |
境界チェックなし | |
StrCpyA |
境界チェックなし | |
StrCpyN |
NULL 終了しない | |
StrCpyNA |
NULL 終了しない | |
StrCpyNW |
制限付きエラー チェック | |
strcpyW |
境界チェックなし | |
StrCpyW |
境界チェックなし | |
StrNCat |
制限付きエラー検出 | |
StrNCatA |
制限付きエラー検出 | |
StrNCatW |
制限付きエラー検出 | |
StrNCpy |
NULL 終了しない | |
StrNCpyA |
NULL 終了しない | |
StrNCpyW |
NULL 終了しない | |
gets |
制限付きエラー検出。C11 標準で非推奨 | |
lstrcat |
制限付きエラー検出 | |
lstrcatA |
制限付きエラー検出 | |
lstrcatn |
制限付きエラー検出 | |
lstrcatnA |
制限付きエラー検出 | |
lstrcatnW |
制限付きエラー検出 | |
lstrcatW |
制限付きエラー検出 | |
lstrcpy |
境界チェックなし | |
lstrcpyA |
境界チェックなし | |
lstrcpyn |
制限付きエラー検出 | |
lstrcpynA |
制限付きエラー検出 | |
lstrcpynW |
境界チェックなし | |
lstrcpyW |
境界チェックなし | |
snscanf |
sscanf_s |
境界チェックなし |
snwscanf |
swscanf_s |
境界チェックなし |
sprintf |
sprintf_s |
制限付きエラー検出 |
sprintfA |
sprintf_s |
境界チェックなし |
sprintfW |
swprintf_s |
境界チェックなし |
lstrncat |
制限付きエラー検出 | |
makepath |
||
nsprintf |
sprintf_s |
エラー検出または境界チェックなし |
strcat |
制限付きエラー検出 | |
strcatA |
制限付きエラー検出 | |
strcatW |
制限付きエラー検出 | |
strcpy |
境界チェックなし | |
strcpyA |
境界チェックなし | |
strncat |
制限付きエラー検出 | |
strncpy |
制限付きエラー検出 | |
swprintf |
制限付きエラー検出 | |
ualstrcpyW |
境界チェックなし | |
vsnprintf |
制限付きエラー検出 | |
vsprintf |
制限付きエラー検出 | |
vswprintf |
vswprintf_s |
|
wcscat |
制限付きエラー検出 | |
wcscpy |
境界チェックなし | |
wcsncat |
$ | 制限付きエラー検出 |
wcsncpy |
制限付きエラー検出 | |
wnsprintf |
NULL 終了なし | |
wnsprintfA |
NULL 終了なし | |
wsprintf |
NULL 終了なし | |
wsprintfA |
NULL 終了なし | |
wsprintfW |
NULL 終了なし | |
wvnsprintf |
NULL 終了なし | |
wvnsprintfA |
NULL 終了なし | |
wvnsprintfW |
NULL 終了なし | |
wvsprintf |
NULL 終了なし | |
wvsprintfA |
NULL 終了なし | |
wvsprintfW |
NULL 終了なし |