C 非空终止字符串错误报警?

C 非空终止字符串错误报警?,c,klocwork,C,Klocwork,Klocwork发出的警报似乎是假的。 它提到的bug描述了我们代码中80%的bug。 请告知 以下是一个剪报集(意译):- 起初我以为这是自然现象 对于这个问题,当您执行strcpy时,您需要检查目标字符串是否足够大以容纳源字符串 这里DEST_LEN等于以字节为单位分配的内存量 if(source != NULL && dest != NULL) { strncpy (dest , source , DEST_LEN -1); } 感谢主持人的编辑 Klockwor

Klocwork发出的警报似乎是假的。 它提到的bug描述了我们代码中80%的bug。 请告知

以下是一个剪报集(意译):-

起初我以为这是自然现象

对于这个问题,当您执行strcpy时,您需要检查目标字符串是否足够大以容纳源字符串

这里DEST_LEN等于以字节为单位分配的内存量

if(source != NULL && dest != NULL)

{

strncpy (dest , source , DEST_LEN -1);

}

感谢主持人的编辑


Klockworks将strcpy检测为错误,因为它只是一个静态分析工具。我建议您为与字符串相关的操作定义自定义宏。这将检查要复制的内存长度。对于其他操作,您也可以轻松编辑此宏并避免上述错误警报。

您使用的是什么版本的Klocwork产品?我只是尝试分析提供的代码示例,但没有得到任何报告。在代码中添加一个有意的NPD确实会导致一个报告,只是为了证明我确实在运行这个工具;p如果您没有运行合理的最新产品,建议您尝试升级(Insight 9.1是最新发布的产品集)

问候,, 格温·费希尔 Klocwork公司研发首席技术官和副总裁
gwyn在klocwork.com

您好,我的版本是9.0.0(build 9.0.0.1.8),调用strcpy时,错误出现在snip集的第二个块中。似乎Klocwork不知道destStr被前面的“if(destStr!=Null)”终止为Null。这是一个更复杂情况的解释,当一个函数创建一个char*str并将其返回给另一个执行与strcpy类似操作的函数时。请注意,calloc解决了这个问题,但我不希望额外的开销,因为原始代码经常使用。好的,如果可能,建议您升级。没有看到实际的例子,我不能保证任何事情,但值得一试!嗨,strncpy解决了这个问题。但是,由于这只是对记录器调用的一种解释,我无法确定字符串本身的大小。记录器有:(*this)[nSeverity]@Moshe-请注意,当您进行动态分配时,您提前知道字符串的长度。使用它在strncpy中分配内存和内存。请在您的评论中详细说明。可能重复的
Please paste formatted code (read Readable code)
if(source != NULL && dest != NULL)

{

strncpy (dest , source , DEST_LEN -1);

}