如何修复Parasoft检查的错误

时间:2016-03-03 07:44:51

标签: c 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'

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

2 个答案:

答案 0 :(得分:1)

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

sizeof返回size_t类型的值,在您的情况下,它似乎是unsigned Iong的别名。这个问题是unsigned long可能(太多)太大而无法转换为int

你在这里做的不多。要消除错误,您可以使用强制转换:

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

请注意,如果您决定将该数组更改为动态分配的数组,或者将代码重写为不同的函数,则使用sizeof可能会让您遇到麻烦。

答案 1 :(得分:0)

您使用的是哪种产品?如果您正在使用C ++测试,您可以转到正在报告的违规的质量任务视图,并右键单击违规并选择“查看规则文档”,这解释了为什么要抛出违规行为并为您提供示例如何修复违规行为。