3

在我的源代码(在 C 中)中,有如下一行:

char line[1000] = "";
fgets(line, sizeof(line), file)

当我使用 parasoft 检查时,我收到两个错误:

In 'fgets' function call, do not pass long casted to int expression as '2' function argument
The type 'unsigned long' of function argument number '2' does not match declared type 'int'

我发现源代码中的这些行没有任何问题,所以我不知道如何修复这些错误。你能给我一个建议吗?

4

2 回答 2

1

fgets正在接受int它的第二个参数。(恕我直言,这是一个缺陷)

sizeof返回 type 的值size_t,在您的情况下,它似乎是unsigned Iong. 这样做的问题是 anunsigned long可能(太多)太大而无法转换为int.

您在这里无能为力。要摆脱错误,您可以使用强制转换:

fgets(line, (int)sizeof(line), file);

请注意,sizeof如果在某些时候您决定将该数组更改为动态分配的数组,或者您将代码重构为不同的函数,您的使用可能会给您带来麻烦。

于 2016-03-03T08:01:12.230 回答
0

你用的是什么产品?如果您使用的是 C++test,您可以转到正在报告的违规的质量任务视图,然后右键单击违规并选择“查看规则文档”,这解释了引发违规的原因并为您提供了一个示例如何解决违规问题。

于 2016-03-03T16:58:05.513 回答