C6384
警告 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);
}
}