Поделиться через


Предоставляйте перегруженный шаблона

Многие функции 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");

См. также

Ссылки

Функции библиотеки CRT

Основные понятия

Средства безопасности в CRT