C6384

更新:2007 年 11 月

警告 C6384:用另一值除指针的 sizeof 值

此警告意味着大小计算可能有误。为了计算数组中元素的数目,用户有时用第一个元素的大小除数组的大小;但是,当数组实际上是指针时,结果通常与所预期的不同。

如果指针是函数参数,而且未传递缓冲区的大小,则不能计算可用的最大缓冲区。当指针在本地分配时,应当使用在分配时所使用的大小。

示例

下面的代码生成此警告:

#include <windows.h>
#include <TCHAR.h>

#define SIZE 15

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy(dest, src, sizeof dest  / sizeof dest[0]); 
  }
}

若要更正此警告,请传递缓冲区大小,如下面的代码所示:

#include <windows.h>
#include <TCHAR.h>

#define SIZE 15

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy(dest, src, SIZE);
  }
}

若要使用安全的字符串函数 _tcsncpy_s 更正此警告,请使用下面的代码:

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
   _tcsncpy_s(dest, SIZE, src, SIZE);
  }
} 

请参见

参考

_mbsnbcpy_s, _mbsnbcpy_s_l

sizeof Operator