我正在使用带有 Visual C++ 2008 的 systemC。我编写了一个简单的 hello world 程序。但是我反复收到此错误:
警告 C4996:“sprintf”:此函数或变量可能不安全。
为什么会这样?我将不胜感激任何帮助。
我正在使用带有 Visual C++ 2008 的 systemC。我编写了一个简单的 hello world 程序。但是我反复收到此错误:
警告 C4996:“sprintf”:此函数或变量可能不安全。
为什么会这样?我将不胜感激任何帮助。
编译器警告不要sprintf()
使用,因为它可能导致缓冲区溢出,因为它不检查缓冲区的限制。相反,使用snprintf()
which 永远不会填充超出传入限制的缓冲区。
手册页也给出了这个建议:
因为 sprintf() 和 vsprintf() 假定一个任意长的字符串,调用者必须小心不要溢出实际空间;这通常是无法保证的。请注意,生成的字符串的长度取决于语言环境并且难以预测。请改用 snprintf() 和 vsnprintf()(或 asprintf(3) 和 vasprintf(3))。
这是不安全的,因为 - 来自 MSDN
无法限制写入的字符数,这意味着使用 sprintf 的代码容易受到缓冲区溢出的影响。考虑使用相关函数 _snprintf,它指定要写入缓冲区的最大字符数,或使用 _scprintf 来确定需要多大的缓冲区。此外,请确保格式不是用户定义的字符串。