다음을 통해 공유


경고 C28719

금지된 API 사용: 함수 이름 안전하지 않으며 사용되지 않는 것으로 표시되었습니다.

이 경고는 금지되었으며 보다 강력하거나 안전한 대체 기능을 사용하는 함수를 사용하고 있음을 나타냅니다.

비고

이 오류에서 다루는 모든 금지 함수 목록, 금지된 이유 및 권장되는 교체는 다음 예제 다음에 찾을 수 있습니다.

코드 분석 이름: BANNED_API_USAGE

본보기

다음 코드는 이 경고를 생성합니다.

void example_func(PSTR src) 
{ 
    char dst[100]; 
    strcpy(dst, src);
} 

이 문제는 안전하지 않은 함수 strcpy사용에서 비롯됩니다. strcpy 대상 버퍼가 원본 데이터에 맞게 충분히 큰지 확인하지 않습니다.

이 문제를 해결하기 위해 C++11의 안전한 대체 기능인 strcpy_s 이 함수를 사용할 수 있습니다. 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_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 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 종료 없음