Sobrecargas de modelo seguras
Muitas funções de CRT foram substituídas em favor de novas, versões de segurança aprimoradas (por exemplo, strcpy_s é mais seguro substituição para strcpy). O fornece CRT sobrecargas do modelo para ajudar a tornar a transição para as variantes mais seguros.
Por exemplo, esse código gerenciado como um aviso strcpy é preterido:
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
Você pode ignorar o aviso. Define o símbolo _CRT_SECURE_NO_WARNINGS para suprimir o aviso, ou atualizar o código para usar strcpy_s:
char szBuf[10];
strcpy_s(szBuf, 10, "test"); // security-enhanced _s function
As sobrecargas do modelo fornecem opções adicionais. Definir _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES a 1 habilita as sobrecargas do modelo de CRT padrão funções que chamam o mais seguro variantes automaticamente. Se _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES for 1, nenhuma alteração no código é necessária. Nos bastidores, a chamada para strcpy será alterado para uma chamada a strcpy_s com o argumento de tamanho 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 as funções que usam uma pontuação, como strncpy. Para habilitar sobrecargas do modelo para as funções de pontuação, defina como 1. _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT . Antes de fazer isso, no entanto, verifique se seu código passa a contagem de caracteres, não o tamanho do buffer (um erro comum). Além disso, código que grava explicitamente um terminador nulo no final do buffer depois da chamada de função é desnecessária se a variante segura é chamada. Se você precisar do comportamento de truncamento, consulte _TRUNCATE.
Dica
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT macro requer que _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES também está definido como 1.Se _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT é definido como 1 e _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES está definido como 0, o aplicativo não executará nenhuma sobrecargas do modelo.
Definir _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES a 1 habilita sobrecargas do modelo das variantes seguras (nomes que terminam em “_s”). Nesse caso, se _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES for 1, então uma pequena alteração deve ser feita ao 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 do modelo terá de fornecer o argumento de tamanho.
Por padrão, _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES e _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT são definidos como 0 (desabilitado) e _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES é definido como 1 (habilitado).
Observe que estas sobrecargas do modelo só funcionam para matrizes estáticos. Os buffers alocados dinamicamente exigem alterações adicionais do código-fonte. Revisitando os exemplos anteriores:
#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");