Предоставляйте перегруженный шаблона
Многие функции CRT нерекомендуемый в использование новой версии безопасность-улучшенного (например, strcpy_s замена для более безопасной strcpy).Библиотека CRT предоставляет перегруженные версии шаблона, чтобы упростить переход к более безопасный вариантам.
Например, этот код формирует предупреждение, поскольку strcpy нерекомендуемый.
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
Можно игнорировать предупреждение.Укажите символ _CRT_SECURE_NO_WARNINGS отключить предупреждение или обновления кода для использования strcpy_s.
char szBuf[10];
strcpy_s(szBuf, 10, "test"); // security-enhanced _s function
Перегруженные варианты шаблонов предоставляют дополнительные возможности.Определение _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES значение 1 включает перегруженные версии шаблона стандартного CRT функции, вызывающие более безопасный вариантами автоматически.If _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1, тогда никакие изменения в код не требуются.Незаметно для пользователя вызов strcpy изменяет к вызову strcpy_s если аргумент size предоставленный автоматически.
#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 не влияет на функции, которые принимают число, например strncpy.Чтобы включить перегруженные версии шаблона для функций count, укажите _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT до 1.Перед внесением, однако, убедитесь, что код передает число символов, а не размер буфера (общей ошибки).Кроме того, код, который явно записывает символ конца строки null в конце буфера после того, как вызов функции является необязательным, если безопасный вариант вызывается.Если требуется провести функциональности усечения см. в разделе _TRUNCATE.
Примечание |
---|
Макрос _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT требует того _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES также определяет как 1.If _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT определяет, как и 1 _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES определяет, как 0, приложение не выполняется никаких перегруженные версии шаблона. |
Определение _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES значение 1 включает перегруженные версии шаблона безопасных вариантов (имен, которая на "_s").В этом случае, если _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1, то необходимо выполнить одно небольшое изменение в исходный код:
#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1
...
char szBuf[10];
strcpy_s(szBuf, "test"); // ==> strcpy_s(szBuf, 10, "test")
Только имени функции, необходимо изменить (путем добавления "_s"); перегрузка шаблона позаботится о защите аргумент size.
По умолчанию _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES и _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT укажите способ (запрещено) и 0 _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES указывает способ 1 (включено).
Обратите внимание, что эти перегруженные версии шаблона работают только для статических массивов.Динамически размещенные буферы требуют дополнительных изменений исходного кода.Revisiting приведенные выше примеры:
#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");
и это:
#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");