금지된 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 종료 없음 |