Сведения о Strsafe.h
Низкая обработка буфера связана со многими проблемами безопасности, включающими переполнение буфера. Функции, определенные в Strsafe.h, обеспечивают дополнительную обработку буферов в коде. По этой причине они предназначены для замены встроенных аналогов C/C++, а также конкретных реализаций Windows. Strsafe.h доступен в пакете SDK для Windows, начиная с Windows XP с пакетом обновления 2 (SP2).
Преимущества функций Strsafe:
Размер целевого буфера всегда предоставляется функции, чтобы убедиться, что функция не записывает в конец буфера.
Буферы гарантированно завершаются значением NULL, даже если операция усечет предполагаемый результат.
Все функции возвращают значение HRESULT с одним возможным кодом успешного выполнения (S_OK).
Каждая функция доступна в соответствующей версии числа символов (cch) или числа байтов (cb).
Большинство функций имеют расширенную (ex) версию, доступную для расширенных функций.
Дополнительные сведения см. в следующих разделах.
Функции подсчета символов
В следующих функциях используется число символов, а не число байтов.
Function | Заменяет |
---|---|
, | |
Функции счетчика байтов
В следующих функциях используется число байтов, а не число символов.
Function | Заменяет |
---|---|
Использование Strsafe.h
Чтобы использовать встроенные функции Strsafe, включите файл заголовка, как показано здесь, следуя инструкциям #include для всех остальных файлов заголовков.
#include <strsafe.h>
Чтобы использовать функции в форме библиотеки, добавьте следующую инструкцию перед включением Strsafe.h. Однако рекомендуется использовать встроенные функции.
#define STRSAFE_LIB
Примечание.
: следующие функции должны использоваться в качестве встроенных функций: StringCbGets, StringCbGetsEx, StringCchGets и StringCchGetsEx.
При включении Strsafe.h в файл старые функции, замененные функциями Strsafe.h, будут устаревшими. Попытки использования этих старых функций приводят к ошибке компилятора, указывающее, что вы используете более новые функции. Если вы хотите переопределить это поведение, добавьте следующую инструкцию перед включением Strsafe.h.
#define STRSAFE_NO_DEPRECATE
Чтобы разрешить только функции счетчика символов, добавьте следующую инструкцию перед включением Strsafe.h.
#define STRSAFE_NO_CB_FUNCTIONS
Чтобы разрешить только функции счетчика байтов, добавьте следующую инструкцию перед включением Strsafe.h.
#define STRSAFE_NO_CCH_FUNCTIONS
Примечание.
Можно определить STRSAFE_NO_CB_FUNCTIONS или STRSAFE_NO_CCH_FUNCTIONS, но не оба.
Некоторые функции Strsafe имеют версии с поддержкой языкового стандарта. По умолчанию заголовок не объявляет эти функции. Чтобы включить эти объявления, добавьте следующую инструкцию макроса перед включением Strsafe.h.
#define STRSAFE_LOCALE_FUNCTIONS
Максимальная поддерживаемая длина строки составляет 2 147 483 647 символов (STRSAFE_MAX_CCH), ANSI или Юникод.
См. также