Поделиться через


Предупреждение C28719

Запрещено использование 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 Без завершения со значением NULL
StrCatBuffW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Без завершения со значением NULL
StrCatChainW StringCbCatEx, StringCbCatNEx, StringCchCatEx, StringCchCatNEx Без завершения со значением NULL
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 Не завершается со значением NULL
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_sStringCbPrintf, 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 Без завершения со значением NULL
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 Без завершения со значением NULL
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 Без завершения со значением NULL