c - 使用文件中的 fscanf 来 bool 变量和覆盖运行

标签 c scanf

在我的项目中,我目前正在使用 fscanf(fp, "%d ",&deviceId)) 其中 fp 是文件指针,deviceId 是一个 BOOL 变量。一旦我运行覆盖工具(静态分析),我就会收到如下所示的警告:

CID 11375 (#1 of 1): Calling risky function (SECURE_CODING) secure_coding: [VERY RISKY]. Using "fscanf" can cause a buffer overflow when done incorrectly. fscanf() assumes an arbitrarily large string, so callers must use correct precision specifiers or never use fscanf(). Use correct precision specifiers or do your own parsing.

有没有办法解决这个缺陷,因为我无法更改 fscanf 的使用。任何格式说明符都可以吗?

最佳答案

静态分析器总是会发出大量错误警告。在这种情况下,出于警告中提到的原因,您的特定静态分析器可能会根据某些禁止使用 fscanf 的给定代码标准检查代码,无论其输入是什么。

您必须知道您正在检查的代码标准以及原因。您显然已决定应用禁止 fscanf 的编码标准,但您坚持使用该功能。

所以没有其他人可以为您解决这个问题。如果您的编码标准允许偏差,您需要创建一个偏离该规则的偏差,或者您必须停止使用 fscanf,或者您必须选择对您的应用程序有意义的编码标准/工具。

关于c - 使用文件中的 fscanf 来 bool 变量和覆盖运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26016593/

相关文章:

无法修改字符数组

c - 如何定义从文本文件扫描的行的结构最大大小

C 程序以 -1 (0xFFFFFFFF) 终止,似乎没有任何原因?

c - 为什么 "strupr"的这个实现不起作用?

c - 如何用 C 语言完成这个作业?

c - sscanf 支持 bool 类型吗?

c - 如何在 while 循环中正确使用 fscanf?

c - 如何理解枚举定义中的#include?

c++ - 在包裹的命令行中//之后解开空间

c - 使用 getchar() 和 select() 从非阻塞 IO 获取多个字符时出现奇怪的 C 行为