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