0

我正在使用带有 Visual C++ 2008 的 systemC。我编写了一个简单的 hello world 程序。但是我反复收到此错误:

警告 C4996:“sprintf”:此函数或变量可能不安全。

为什么会这样?我将不胜感激任何帮助。

4

2 回答 2

4

编译器警告不要sprintf()使用,因为它可能导致缓冲区溢出,因为它不检查缓冲区的限制。相反,使用snprintf()which 永远不会填充超出传入限制的缓冲区。

手册页也给出了这个建议:

因为 sprintf() 和 vsprintf() 假定一个任意长的字符串,调用者必须小心不要溢出实际空间;这通常是无法保证的。请注意,生成的字符串的长度取决于语言环境并且难以预测。请改用 snprintf() 和 vsnprintf()(或 asprintf(3) 和 vasprintf(3))。

于 2012-01-28T01:24:21.560 回答
0

这是不安全的,因为 - 来自 MSDN

无法限制写入的字符数,这意味着使用 sprintf 的代码容易受到缓冲区溢出的影响。考虑使用相关函数 _snprintf,它指定要写入缓冲区的最大字符数,或使用 _scprintf 来确定需要多大的缓冲区。此外,请确保格式不是用户定义的字符串。

于 2012-01-28T01:25:51.017 回答