Proteger overloads de modelo
Muitas funções de CRT foram preterido em favor de versões mais recentes, com segurança avançado (por exemplo, strcpy_s é o substituto mais seguro do strcpy).A CRT fornece sobrecargas de modelo para ajudar a facilitar a transição para as variantes mais seguras.
Por exemplo, este código gera um aviso porque strcpy está obsoleto:
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
Você pode ignorar o aviso, definem o símbolo _CRT_SECURE_NO_WARNINGS para eliminar o aviso ou atualizar o código para usar strcpy_s:
char szBuf[10];
strcpy_s(szBuf, 10, "test"); // security-enhanced _s function
Sobrecargas de modelo oferecem opções adicionais.Definir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 permite sobrecargas de modelo de funções de CRT padrão que chamam as variantes mais seguras automaticamente.Se _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES for 1, são necessárias sem alterações no código.Nos bastidores, a telefonar para strcpy será alterada para uma telefonar para strcpy_s com o argumento de dimensionar fornecido automaticamente.
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
...
char szBuf[10];
strcpy(szBuf, "test"); // ==> strcpy_s(szBuf, 10, "test")
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES não afeta sistema autônomo funções que realizar uma contagem, sistema autônomo funções strncpy.Para ativar o modelo sobrecargas para as funções de contagem, defina _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT 1.Antes de fazer isso, no entanto, certifique-se de que seu código passa a contagem de caracteres, não o dimensionar do buffer (um erro comum).Além disso, código que grava explicitamente um terminador nulo no participante do buffer após a telefonar de função desnecessária se a variação segura for telefonar.Se você precisar de truncamento de comportamento, consulte _TRUNCATE.
Definir _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1 permite sobrecargas de modelo de variantes do seguras (nomes terminados em "_s").Nesse caso, se _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES estiver 1, uma pequena alterar deve ser feita com o código original:
#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1
...
char szBuf[10];
strcpy_s(szBuf, "test"); // ==> strcpy_s(szBuf, 10, "test")
Somente o nome da função precisa ser alterado (adicionando "_s"); a sobrecarga de modelo cuidará de fornecer o argumento de dimensionar.
Por padrão, _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES e _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT são definidos sistema autônomo 0 (desabilitado) e _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES é definido sistema autônomo 1 (ativado).
Observe esses modelo sobrecargas trabalho apenas para arrays estático.Buffers alocados dinamicamente exigem alterações no código-fonte adicionais.Revisitando exemplos acima:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
...
char *szBuf = (char*)malloc(10);
strcpy(szBuf, "test"); // still deprecated; have to change to
// strcpy_s(szBuf, 10, "test");
E isso:
#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1
...
char *szBuf = (char*)malloc(10);
strcpy_s(szBuf, "test"); // doesn't compile; have to change to
// strcpy_s(szBuf, 10, "test");
Consulte também
Conceitos
Aprimoramentos de segurança no CRT