首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修正Parasoft检查的错误

如何修正Parasoft检查的错误
EN

Stack Overflow用户
提问于 2016-03-03 07:44:51
回答 2查看 156关注 0票数 3

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

代码语言:javascript
复制
char line[1000] = "";
fgets(line, sizeof(line), file)

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

代码语言:javascript
复制
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'

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-03 08:01:12

fgets接受int作为其第二个参数。(国际水文学组织,这是一个缺陷)

sizeof返回一个类型为size_t的值,在您的示例中,该值似乎是unsigned Iong的别名。这方面的问题是,unsigned long可能(很大)太大,无法转换为int

你对此无能为力。为了消除错误,可以使用强制转换:

代码语言:javascript
复制
fgets(line, (int)sizeof(line), file);

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

票数 1
EN

Stack Overflow用户

发布于 2016-03-03 16:58:05

你用的是什么产品?如果您使用的是C++test,您可以转到所报告的违规事件的quality视图,右键单击违规事件,并选择“查看规则文档”来解释抛出违规行为的原因,并给出如何修复违规行为的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35766046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档