Cppcheck 检测到代码中存在潜在问题,如下所示:
float a, b, c;
int count = sscanf(data, "%f,%f,%f", &a, &b, &c);
它说:“没有字段宽度限制的 scanf 可能会因大量数据而崩溃”。这怎么可能?这是某些 sscanf 实现中的已知错误吗?我知道数字可能会溢出(数字),但是程序怎么会崩溃呢?这是 cppcheck 中的误报吗?
我发现了一个类似的问题:scanf Cppcheck警告 https://stackoverflow.com/questions/7022468/scanf-cppcheck-warning,但答案并不完全令人满意。答案提到了类型安全,但这不应该成为问题。
我是一名 Cppcheck 开发人员。
是的,这是一次奇怪的崩溃。 “海量数据”意味着数百万个数字。
如果您使用 --verbose 标志,那么 cppcheck 实际上会编写一些通常在 Linux 计算机上崩溃的示例代码。
以下是在我的 Ubuntu 11.10 计算机上因分段错误而崩溃的示例代码:
#include <stdio.h>
#define HUGE_SIZE 100000000
int main()
{
int i;
char *data = new char[HUGE_SIZE];
for (int i = 0; i < HUGE_SIZE; ++i)
data[i] = '1';
data[HUGE_SIZE-1] = 0;
sscanf(data, "%i", &i);
delete [] data;
return 0;
}
供您参考,当我在 Visual Studio 上尝试此示例代码时,我没有遇到崩溃。
我使用g++版本4.6.1来编译。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)