다음을 통해 공유


경고 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 대체(s) 근거/참고 사항
_fstrcat StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 레거시 16비트 원거리 포인터 구현
_fstrcpy StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 레거시 16비트 원거리 포인터 구현
_fstrncat StringCbCatN, StringCbCatNEx, StringCchCatNStringCchCatNEx 레거시 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, StringCchGetsExgets_s 데이터에 대한 크기 제한 없음
_gettws gets_s 데이터에 대한 크기 제한 없음
_getws _getws_s 데이터에 대한 크기 제한 없음
_mbccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExstrlcat 데이터에 대한 크기 제한 없음
_makepath _makepath_s 데이터에 대한 크기 제한 없음
_mbscat _mbscat_s
_snprintf _snprintf_s NULL 종료 안 하세요.
_sntprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx NULL 종료 안 하세요.
_sntscanf _snscanf_s 최대 길이 없음
_snwprintf _snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx NULL 종료 안 하세요.
_splitpath _splitpath_s 경계 확인 없음
_stprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx 제한된 오류 검색
_stscanf sscanf_s (형식 문자열 변경 필요) 경계 확인 없음
_tccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExstrlcat 경계 확인 없음
_tccpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyExstrlcpy 경계 확인 없음
_tcscat StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 제한된 오류 검색
_tcscpy StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 제한된 오류 검색
_tcsncat StringCbLength, StringCchLength, UnalignedStringCbLengthUnalignedStringCchLength 최대 길이 없음
_tcsncpy StringCbCopyN, StringCbCopyNEx, StringCchCopyNStringCchCopyNEx 제한된 오류 검색
_tmakepath _makepath_s 경계 확인 없음
_tscanf scanf_s 출력을 확인하는 경계 없음
_tsplitpath splitpath_s, wsplitpath_s 경계 확인 없음
_vsnprintf _vsnprintf_s, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx 제한된 오류 검색
_vsntprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx 제한된 오류 검색
_vsnwprintf _vsnwprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lExStringCbVPrintfEx 제한된 오류 검색
_vstprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrinfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx 최대 길이 없음
_wmakepath _wmakepath_s 경계 확인 없음
_wsplitpath _wsplitpath_s 경계 확인 없음
OemToCharW WideCharToMultiByte 경계 확인 없음
StrCat StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 제한된 오류 검색
StrCatA StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 제한된 오류 검색
StrCatBuff StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx NULL 종료 없음
StrCatBuffA StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx NULL 종료 없음
StrCatBuffW StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx NULL 종료 없음
StrCatChainW StringCbCatEx, StringCbCatNEx, StringCchCatExStringCchCatNEx NULL 종료 없음
StrCatN StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNStringCchCatNEx 경계 확인 없음
StrCatNA StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNStringCchCatNEx 경계 확인 없음
StrCatNW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNStringCchCatNEx 경계 확인 없음
StrCatW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNStringCchCatNEx 경계 확인 없음
StrCpy StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 경계 확인 없음
StrCpyA StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 경계 확인 없음
StrCpyN StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx NULL 종료 안 하세요.
StrCpyNA StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx NULL 종료 안 하세요.
StrCpyNW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 제한된 오류 검사
strcpyW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 경계 확인 없음
StrCpyW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 경계 확인 없음
StrNCat StringCbCatN, StringCbCatNEx, StringCchCatNStringCchCatNEx 제한된 오류 검색
StrNCatA StringCbCatN, StringCbCatNEx, StringCchCatNStringCchCatNEx 제한된 오류 검색
StrNCatW StringCbCatN, StringCbCatNEx, StringCchCatNStringCchCatNEx 제한된 오류 검색
StrNCpy StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx NULL 종료 안 하세요.
StrNCpyA StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx NULL 종료 안 하세요.
StrNCpyW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx NULL 종료 안 하세요.
gets gets_s, fgets, StringCbGets, StringCbGetsEx, StringCchGetsStringCchGetsEx 제한된 오류 검색; C11 표준으로 사용되지 않음
lstrcat StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 제한된 오류 검색
lstrcatA StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 제한된 오류 검색
lstrcatn StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 제한된 오류 검색
lstrcatnA StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 제한된 오류 검색
lstrcatnW StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 제한된 오류 검색
lstrcatW StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 제한된 오류 검색
lstrcpy StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 경계 확인 없음
lstrcpyA StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 경계 확인 없음
lstrcpyn StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 제한된 오류 검색
lstrcpynA StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 제한된 오류 검색
lstrcpynW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 경계 확인 없음
lstrcpyW StringCbCopy, StringCbCopyEx, StringCchCopyStringCchCopyEx 경계 확인 없음
snscanf sscanf_s 경계 확인 없음
snwscanf swscanf_s 경계 확인 없음
sprintf sprintf_s 제한된 오류 검색
sprintfA sprintf_s 경계 확인 없음
sprintfW swprintf_s 경계 확인 없음
lstrncat StringCbCat, StringCbCatEx, StringCchCatStringCchCatEx 제한된 오류 검색
makepath
nsprintf sprintf_s 오류 검색 또는 경계 검사 없음
strcat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExstrlcat 제한된 오류 검색
strcatA strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExstrlcat 제한된 오류 검색
strcatW strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExstrlcat 제한된 오류 검색
strcpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyExstrlcpy 경계 확인 없음
strcpyA strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyExstrlcpy 경계 확인 없음
strncat strncat_s, StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNExstrlcat 제한된 오류 검색
strncpy strncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNExstrlcpy 제한된 오류 검색
swprintf swprintf_sStringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfStringCbPrintfEx 제한된 오류 검색
ualstrcpyW strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyExstrlcpy 경계 확인 없음
vsnprintf vsnprintf_s,StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintfStringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx 제한된 오류 검색
vsprintf vsprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_lStringCchVPrintf_lEx, StringCchVPrintfExvasprintf 제한된 오류 검색
vswprintf vswprintf_s
wcscat wcscat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatExwcslcat 제한된 오류 검색
wcscpy wcscpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyExwcslcpy 경계 확인 없음
wcsncat wcsncat_s, wcslcat 제한된 오류 검색
wcsncpy wcsncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNExwcslcpy 제한된 오류 검색
wnsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx NULL 종료 없음
wnsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx NULL 종료 없음
wsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx NULL 종료 없음
wsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx NULL 종료 없음
wsprintfW StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintfStringCchPrintfEx NULL 종료 없음
wvnsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx NULL 종료 없음
wvnsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx NULL 종료 없음
wvnsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx NULL 종료 없음
wvsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx NULL 종료 없음
wvsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx NULL 종료 없음
wvsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lExStringCchVPrintfEx NULL 종료 없음