Compartilhar via


Aviso C28719

Uso de API banido: o nome da função é inseguro e foi marcado como obsoleto.

O aviso indica que está sendo usada uma função que foi banida e que tem uma substituição mais robusta ou segura.

Comentários

Uma lista de todas as funções proibidas cobertas por esse erro, por que elas foram banidas e substituições recomendadas pode ser encontrada após o exemplo a seguir.

Nome da análise de código: BANNED_API_USAGE

Exemplo

O seguinte código gera esse aviso:

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

Esse problema decorre do uso da função insegura strcpy. strcpy não verifica se o buffer de destino é grande o suficiente para caber nos dados de origem. Para corrigir esse problema, podemos usar o strcpy_s, a substituição mais segura do C++11 para essa função. strcpy_s tem um terceiro parâmetro (o tamanho do buffer de destino) para garantir que apenas muitos bytes sejam copiados. Por exemplo, o código a seguir é mais seguro:

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

Funções proibidas

NOTA: Esta lista está sendo atualizada e aprimorada ativamente

API proibida Substituição(ões) Justificativa/Notas
_fstrcat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Implementação de ponteiro distante herdado de 16 bits
_fstrcpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Implementação de ponteiro distante herdado de 16 bits
_fstrncat StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Implementação de ponteiro distante herdado de 16 bits
_fstrncpy strncpy, wcsncpy Implementação de ponteiro distante herdado de 16 bits
_ftccat strcat, wcscat Implementação de ponteiro distante herdado de 16 bits
_ftccpy strcpy, wcscpy Implementação de ponteiro distante herdado de 16 bits
_ftcscat strcat, wcscat Implementação de ponteiro distante herdado de 16 bits
_ftcscpy strcpy, wcscpy Implementação de ponteiro distante herdado de 16 bits
_getts StringCbGets, StringCbGetsEx, StringCchGets, StringCchGetsEx, gets_s Sem limite de tamanho nos dados
_gettws gets_s Sem limite de tamanho nos dados
_getws _getws_s Sem limite de tamanho nos dados
_mbccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, , strlcat Sem limite de tamanho nos dados
_makepath _makepath_s Sem limite de tamanho nos dados
_mbscat _mbscat_s
_snprintf _snprintf_s Não termina em NULL
_sntprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, , StringCchPrintfEx Não termina em NULL
_sntscanf _snscanf_s Sem comprimento máximo
_snwprintf _snwprintf_s, StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, , StringCchPrintfEx Não termina em NULL
_splitpath _splitpath_s Sem verificação de limites
_stprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, , StringCchPrintfEx Detecção limitada de erros
_stscanf sscanf_s (requer alterações de cadeia de caracteres de formato) Sem verificação de limites
_tccat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, , strlcat Sem verificação de limites
_tccpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, , strlcpy Sem verificação de limites
_tcscat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Detecção limitada de erros
_tcscpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Detecção limitada de erros
_tcsncat StringCbLength, StringCchLength, UnalignedStringCbLength, UnalignedStringCchLength Sem comprimento máximo
_tcsncpy StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx Detecção limitada de erros
_tmakepath _makepath_s Sem verificação de limites
_tscanf scanf_s Sem verificação de limites para saídas
_tsplitpath splitpath_s, wsplitpath_s Sem verificação de limites
_vsnprintf _vsnprintf_s, StringCchVPrintf, StringCchVPrintf_l, StringCchVPrintf_lEx, StringCchVPrintfEx Detecção limitada de erros
_vsntprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx, , StringCchVPrintfEx Detecção limitada de erros
_vsnwprintf _vsnwprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx Detecção limitada de erros
_vstprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrinfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx, , StringCchVPrintfEx Sem comprimento máximo
_wmakepath _wmakepath_s Sem verificação de limites
_wsplitpath _wsplitpath_s Sem verificação de limites
OemToCharW WideCharToMultiByte Sem verificação de limites
StrCat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Detecção limitada de erros
StrCatA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Detecção limitada de erros
StrCatBuff StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sem terminação NULL
StrCatBuffA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sem terminação NULL
StrCatBuffW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Sem terminação NULL
StrCatChainW StringCbCatEx, StringCbCatNEx, StringCchCatEx, StringCchCatNEx Sem terminação NULL
StrCatN StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatN, , StringCchCatNEx Sem verificação de limites
StrCatNA StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatN, , StringCchCatNEx Sem verificação de limites
StrCatNW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatN, , StringCchCatNEx Sem verificação de limites
StrCatW StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, , StringCchCatN, , StringCchCatNEx Sem verificação de limites
StrCpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
StrCpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
StrCpyN StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Não termina em NULL
StrCpyNA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Não termina em NULL
StrCpyNW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Verificação limitada de erros
strcpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
StrCpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
StrNCat StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Detecção limitada de erros
StrNCatA StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Detecção limitada de erros
StrNCatW StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx Detecção limitada de erros
StrNCpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Não termina em NULL
StrNCpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Não termina em NULL
StrNCpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Não termina em NULL
gets gets_s, fgets, StringCbGets, StringCbGetsEx, StringCchGets, , StringCchGetsEx Detecção limitada de erros; obsoleto pelo padrão C11
lstrcat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Detecção limitada de erros
lstrcatA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Detecção limitada de erros
lstrcatn StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Detecção limitada de erros
lstrcatnA StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Detecção limitada de erros
lstrcatnW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Detecção limitada de erros
lstrcatW StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Detecção limitada de erros
lstrcpy StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
lstrcpyA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
lstrcpyn StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Detecção limitada de erros
lstrcpynA StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Detecção limitada de erros
lstrcpynW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
lstrcpyW StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx Sem verificação de limites
snscanf sscanf_s Sem verificação de limites
snwscanf swscanf_s Sem verificação de limites
sprintf sprintf_s Detecção limitada de erros
sprintfA sprintf_s Sem verificação de limites
sprintfW swprintf_s Sem verificação de limites
lstrncat StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx Detecção limitada de erros
makepath
nsprintf sprintf_s Sem detecção de erros ou verificação de limites
strcat strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, , strlcat Detecção limitada de erros
strcatA strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, , strlcat Detecção limitada de erros
strcatW strcat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, , strlcat Detecção limitada de erros
strcpy strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, , strlcpy Sem verificação de limites
strcpyA strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, , strlcpy Sem verificação de limites
strncat strncat_s, StringCbCatN, StringCbCatNEx, StringCchCatN, StringCchCatNEx, , strlcat Detecção limitada de erros
strncpy strncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, , strlcpy Detecção limitada de erros
swprintf swprintf_sStringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintf,StringCbPrintfEx Detecção limitada de erros
ualstrcpyW strcpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, , strlcpy Sem verificação de limites
vsnprintf vsnprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lEx,StringCchVPrintfEx Detecção limitada de erros
vsprintf vsprintf_s, StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfExStringCchVPrintfExStringCchVPrintfStringCchVPrintf_lStringCchVPrintf_lEx,vasprintf Detecção limitada de erros
vswprintf vswprintf_s
wcscat wcscat_s, StringCbCat, StringCbCatEx, StringCchCat, StringCchCatEx, , wcslcat Detecção limitada de erros
wcscpy wcscpy_s, StringCbCopy, StringCbCopyEx, StringCchCopy, StringCchCopyEx, , wcslcpy Sem verificação de limites
wcsncat wcsncat_s, wcslcat Detecção limitada de erros
wcsncpy wcsncpy_s, StringCbCopyN, StringCbCopyNEx, StringCchCopyN, StringCchCopyNEx, , wcslcpy Detecção limitada de erros
wnsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, , StringCchPrintfEx Sem terminação NULL
wnsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, , StringCchPrintfEx Sem terminação NULL
wsprintf StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, , StringCchPrintfEx Sem terminação NULL
wsprintfA StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, , StringCchPrintfEx Sem terminação NULL
wsprintfW StringCbPrintf, StringCbPrintf_l, StringCbPrintf_lEx, StringCbPrintfEx, StringCchPrintf, , StringCchPrintfEx Sem terminação NULL
wvnsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx, , StringCchVPrintfEx Sem terminação NULL
wvnsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx, , StringCchVPrintfEx Sem terminação NULL
wvnsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx, , StringCchVPrintfEx Sem terminação NULL
wvsprintf StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx, , StringCchVPrintfEx Sem terminação NULL
wvsprintfA StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx, , StringCchVPrintfEx Sem terminação NULL
wvsprintfW StringCbVPrintf, StringCbVPrintf_l, StringCbVPrintf_lEx, StringCbVPrintfEx, StringCchVPrintf, StringCchVPrintf_l, , StringCchVPrintf_lEx, , StringCchVPrintfEx Sem terminação NULL