在我的源代码( 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'我在源代码中没有发现这些行有什么问题,所以我不知道如何修复这些错误。你能给我提个建议吗?
发布于 2016-03-03 08:01:12
fgets接受int作为其第二个参数。(国际水文学组织,这是一个缺陷)
sizeof返回一个类型为size_t的值,在您的示例中,该值似乎是unsigned Iong的别名。这方面的问题是,unsigned long可能(很大)太大,无法转换为int。
你对此无能为力。为了消除错误,可以使用强制转换:
fgets(line, (int)sizeof(line), file);请注意,如果您在某个时候决定将该数组更改为动态分配的数组,或者如果您将代码折射成不同的函数,那么使用sizeof可能会给您带来麻烦。
发布于 2016-03-03 16:58:05
你用的是什么产品?如果您使用的是C++test,您可以转到所报告的违规事件的quality视图,右键单击违规事件,并选择“查看规则文档”来解释抛出违规行为的原因,并给出如何修复违规行为的示例。
https://stackoverflow.com/questions/35766046
复制相似问题