如何修复 Parasoft 检查的错误

How to fix error checked by Parasoft

在我的源代码中(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'

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

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

sizeof returns 类型 size_t 的值,在您的情况下似乎是 unsigned Iong 的别名。问题在于 unsigned long 可能(太大)无法转换为 int

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

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

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

您使用的是什么产品?如果您使用的是 C++test,您可以转到质量任务视图以查看所报告的违规情况,然后右键单击违规和 select "View Rule Documentation" 这解释了为什么会引发违规并给出你是一个关于如何解决违规的例子。