Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Запрещенное использование API: имя функции небезопасно и помечено как нерекомендуемое.
Это предупреждение указывает на использование функции, которая была запрещена и для которой имеется более надежная или безопасная замена.
Замечания
Список всех запрещенных функций, охваченных этой ошибкой, почему они запрещены, и рекомендуемые замены можно найти после следующего примера.
Имя анализа кода: BANNED_API_USAGE
Пример
Следующий код создает это предупреждение:
void example_func(PSTR src)
{
char dst[100];
strcpy(dst, src);
}
Эта проблема связана с использованием небезопасной функции strcpy.
strcpy не проверяет, достаточно ли размер целевого буфера для размещения исходных данных.
Чтобы устранить эту проблему, можно использовать strcpy_s, более безопасную замену функции в C++11.
strcpy_s имеет третий параметр (размер целевого буфера), чтобы убедиться, что копируются только многие байты. Например, следующий код безопаснее:
void example_func(PSTR src)
{
char dst[100];
strcpy_s(dst, sizeof(dst), src);
}
Запрещенные функции
ПРИМЕЧАНИЕ. Этот список активно обновляется и улучшается
| Запрещенный API | Замена | Обоснование / Заметки |
|---|---|---|
_fstrcat |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Устаревшая 16-разрядная реализация дальнего указателя |
_fstrcpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Устаревшая 16-разрядная реализация дальнего указателя |
_fstrncat |
StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx |
Устаревшая реализация 16-разрядного дальнего указателя |
_fstrncpy |
strncpy, wcsncpy |
Устаревшая 16-разрядная реализация дальнего указателя |
_ftccat |
strcat, wcscat |
Устаревшая 16-разрядная реализация указателя дальнего доступа |
_ftccpy |
strcpy, wcscpy |
Устаревшая 16-разрядная реализация дальнего указателя |
_ftcscat |
strcat, wcscat |
Устаревшая 16-разрядная реализация дальнего указателя |
_ftcscpy |
strcpy, wcscpy |
Устаревшая 16-разрядная реализация дальнего указателя |
_getts |
StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx, gets_s |
Нет ограничений на размер данных |
_gettws |
gets_s |
Нет ограничений на размер данных |
_getws |
_getws_s |
Нет ограничений на размер данных |
_mbccat |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat |
Нет ограничений на размер данных |
_makepath |
_makepath_s |
Нет ограничений на размер данных |
_mbscat |
_mbscat_s |
|
_snprintf |
_snprintf_s |
Не завершает работу с значением NULL |
_sntprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Не добавляет NULL в конец строки |
_sntscanf |
_snscanf_s |
Максимальная длина отсутствует |
_snwprintf |
_snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Не завершает нулевым символом (NULL) |
_splitpath |
_splitpath_s |
Проверка границ не выполняется |
_stprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Ограниченное обнаружение ошибок |
_stscanf |
sscanf_s (требуется изменение строки форматирования) |
Проверка границ не выполняется |
_tccat |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat |
Проверка границ не выполняется |
_tccpy |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy |
Проверка границ не выполняется |
_tcscat |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
_tcscpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Ограниченное обнаружение ошибок |
_tcsncat |
StringCbLength, StringCchLength, UnalignedStringCbLength, UnalignedStringCchLength |
Максимальная длина отсутствует |
_tcsncpy |
StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx |
Ограниченное обнаружение ошибок |
_tmakepath |
_makepath_s |
Проверка границ не выполняется |
_tscanf |
scanf_s |
Отсутствие проверки границ для выходных данных |
_tsplitpath |
splitpath_s, wsplitpath_s |
Проверка границ не выполняется |
_vsnprintf |
_vsnprintf_s, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Ограниченное обнаружение ошибок |
_vsntprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Ограниченное обнаружение ошибок |
_vsnwprintf |
_vsnwprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx |
Ограниченное обнаружение ошибок |
_vstprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrinfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Максимальная длина отсутствует |
_wmakepath |
_wmakepath_s |
Проверка границ не выполняется |
_wsplitpath |
_wsplitpath_s |
Проверка границ не выполняется |
OemToCharW |
WideCharToMultiByte |
Проверка границ не выполняется |
StrCat |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
StrCatA |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
StrCatBuff |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Без окончания на NULL |
StrCatBuffA |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Без нуль-терминации |
StrCatBuffW |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Отсутствие завершения нулевым символом |
StrCatChainW |
StringCbCatEx, StringCbCatNEx, StringCchCatEx, StringCchCatNEx |
Без нуль-терминатора |
StrCatN |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Проверка границ не выполняется |
StrCatNA |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Проверка границ не выполняется |
StrCatNW |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Проверка границ не выполняется |
StrCatW |
StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatN, StringCchCatNEx |
Проверка границ не выполняется |
StrCpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
StrCpyA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
StrCpyN |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Не завершает строку символом NULL |
StrCpyNA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Не завершает работу с значением NULL |
StrCpyNW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Ограниченная проверка ошибок |
strcpyW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
StrCpyW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
StrNCat |
StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx |
Ограниченное обнаружение ошибок |
StrNCatA |
StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx |
Ограниченное обнаружение ошибок |
StrNCatW |
StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx |
Ограниченное обнаружение ошибок |
StrNCpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Не завершает нулевым символом |
StrNCpyA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Не завершает работу с значением NULL |
StrNCpyW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Не заканчивает строку символом NULL |
gets |
gets_s, fgets, StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx |
Ограниченное обнаружение ошибок; устаревший стандарт C11 |
lstrcat |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcatA |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcatn |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcatnA |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcatnW |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcatW |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
lstrcpy |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
lstrcpyA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
lstrcpyn |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Ограниченное обнаружение ошибок |
lstrcpynA |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Ограниченное обнаружение ошибок |
lstrcpynW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
lstrcpyW |
StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx |
Проверка границ не выполняется |
snscanf |
sscanf_s |
Проверка границ не выполняется |
snwscanf |
swscanf_s |
Проверка границ не выполняется |
sprintf |
sprintf_s |
Ограниченное обнаружение ошибок |
sprintfA |
sprintf_s |
Проверка границ не выполняется |
sprintfW |
swprintf_s |
Проверка границ не выполняется |
lstrncat |
StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx |
Ограниченное обнаружение ошибок |
makepath |
||
nsprintf |
sprintf_s |
Ошибки не обнаруживаются, а границы не проверяются |
strcat |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat |
Ограниченное обнаружение ошибок |
strcatA |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat |
Ограниченное обнаружение ошибок |
strcatW |
strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, strlcat |
Ограниченное обнаружение ошибок |
strcpy |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy |
Проверка границ не выполняется |
strcpyA |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy |
Проверка границ не выполняется |
strncat |
strncat_s, StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx, strlcat |
Ограниченное обнаружение ошибок |
strncpy |
strncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, strlcpy |
Ограниченное обнаружение ошибок |
swprintf |
swprintf_s
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintf, StringCbPrintfEx |
Ограниченное обнаружение ошибок |
ualstrcpyW |
strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, strlcpy |
Проверка границ не выполняется |
vsnprintf |
vsnprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Ограниченное обнаружение ошибок |
vsprintf |
vsprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx, vasprintf |
Ограниченное обнаружение ошибок |
vswprintf |
vswprintf_s |
|
wcscat |
wcscat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, wcslcat |
Ограниченное обнаружение ошибок |
wcscpy |
wcscpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, wcslcpy |
Проверка границ не выполняется |
wcsncat |
wcsncat_s, wcslcat |
Ограниченное обнаружение ошибок |
wcsncpy |
wcsncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, wcslcpy |
Ограниченное обнаружение ошибок |
wnsprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Отсутствие завершающего NULL-символа |
wnsprintfA |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Без нуль-терминирования |
wsprintf |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Без NULL-терминатора |
wsprintfA |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Без символа NULL в конце |
wsprintfW |
StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx |
Нет терминирования NULL |
wvnsprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без окончания символом NULL |
wvnsprintfA |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без окончания NULL-символом |
wvnsprintfW |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без нуль-терминатора |
wvsprintf |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без NULL-терминации |
wvsprintfA |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без NULL-окончания |
wvsprintfW |
StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx |
Без завершения нулевым символом |