在我的源代码中(在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'
我发现源代码中的这些行没有错,所以我不知道如何解决这些错误。你能给我一个建议吗?
答案 0 :(得分:1)
fgets
正在接受int
作为其第二个参数。 (恕我直言,这是一个缺陷)
sizeof
返回size_t
类型的值,在您的情况下,它似乎是unsigned Iong
的别名。这个问题是unsigned long
可能(太多)太大而无法转换为int
。
你在这里做的不多。要消除错误,您可以使用强制转换:
fgets(line, (int)sizeof(line), file);
请注意,如果您决定将该数组更改为动态分配的数组,或者将代码重写为不同的函数,则使用sizeof
可能会让您遇到麻烦。
答案 1 :(得分:0)
您使用的是哪种产品?如果您正在使用C ++测试,您可以转到正在报告的违规的质量任务视图,并右键单击违规并选择“查看规则文档”,这解释了为什么要抛出违规行为并为您提供示例如何修复违规行为。