C6383

警告 C6383:将元素数转换为字节数造成缓冲区溢出: 需要使用元素数作为参数 <number> 调用 <function>

此警告意味着当需要元素数时,传递的却是一个非常数字节数。 通常,当用类型的 sizeof 乘以变量时产生的是字节数,但是通过分析代码可看出需要的是元素数。

示例

下面的代码生成此警告:

#include <string.h>

void f( wchar_t* t, wchar_t* s, int n )
{
  // code...
  wcsncpy (t, s, n*sizeof(wchar_t)); // warning 6383
  // code ...
}

若要更正此警告,请不要将变量与类型的 sizeof 相乘,如下面的代码所示:

void f( wchar_t* t, wchar_t* s, int n )
{
  // code 
  wcsncpy (t, s, n);
  // code ...
}

下面的代码通过使用安全的字符串操作函数来更正此警告:

void f(wchar_t* t, wchar_t* s, size_t n)
{
  // code...
  wcsncpy_s( t, sizeof(s), s, n );
  // code...
} 

请参见

参考

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l

sizeof运算符