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);
} 

请参见

参考

sizeof Operator

sizeof Operator (C)