C6327
警告 C6327:可能出现缓冲区溢出: SysAllocStringLen 复制 <number> 个字符(从字符串 <variable>),而未验证要复制的字符数。 代码可能崩溃
此警告意味着可能出现缓冲区溢出。 SysAllocStringLen 分配一个字符串,然后从指定的字符串复制指定数目的字符。 由于 SysAllocStringLen 不验证要复制的字符数,因此,如果指定的字符数大于字符串中的字符数,则代码可能崩溃。 必须向 SysAllocString 函数传递正确数目的字符,以避免缓冲区溢出。
示例
下面的代码示例生成此警告:
#include <windows.h>
void f ()
{
BSTR bstr;
bstr = SysAllocStringLen(L"txt", 5); // warning 6327
// code...
SysFreeString(bstr);
}
若要更正此警告,请传递正确的字符串长度,如下面的代码所示:
#include <windows.h>
void f()
{
BSTR bstr;
wchar_t *greeting=L"Hello, World!";
bstr = SysAllocStringLen(greeting, sizeof(greeting));
// code...
SysFreeString(bstr);
}