关于 Strsafe.h
缓冲区处理不当与涉及缓冲区溢出的许多安全问题有关。 Strsafe.h 中定义的函数为代码中的正确缓冲区处理提供其他处理。 因此,它们旨在替换其内置的 C/C++ 对应项以及特定的 Windows 实现。 从 Windows XP Service Pack 2(SP2)开始,Windows SDK 中提供了 Strsafe.h。
Strsafe 函数的优点包括:
目标缓冲区的大小始终提供给函数,以确保该函数不会写入缓冲区末尾。
即使操作截断预期结果,缓冲区也保证为 null 终止。
所有函数都返回 HRESULT 值,只有一个可能的成功代码(S_OK)。
每个函数在相应的字符计数(“cch”)或字节计数(“cb”)版本中可用。
大多数函数都有可用于高级功能的扩展(“Ex”)版本。
有关详细信息,请参阅以下部分。
字符计数函数
以下函数使用字符计数而不是字节计数。
函数 | 取代 |
---|---|
, | |
字节计数函数
以下函数使用字节计数而不是字符计数。
函数 | 取代 |
---|---|
使用 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 或 Unicode)。
相关主题