Visual Studio代码分析显示警告C6054

时间:2017-09-12 08:26:05

标签: c visual-studio-2015 code-analysis

在我的解决方案上运行代码分析之后,我得到了一些 C6054零终端丢失警告。

他们中的大多数我都能理解和修复,但下面的例子让我感到有些困扰。

char str[DEF_LEN+1];

if(condition)
{ 
    memset(str,'\0', DEF_LEN+1);

    while((strlen(str) + 1 + strlen(strToCat)) <= DEF_LEN)
    {
        strcat(str, "|");
        strcat(str, strToCat);
    }

    strncpy(otherString, str, DEF_LEN);
}
  

警告6054:&#39; str&#39;应该是零终止但可能不是

独立于 strToCat 的长度是否错误, str 的最后一个字节是否终止?

是由strcat引起的还是&#39; \ 0&#39; memset在此上下文中未被识别为零终止?

此警告的MS help告诉我设置字符串中的第一个元素,但显然无能为力,不是吗?

由于

1 个答案:

答案 0 :(得分:3)

在您的代码段中,memset仅在condition为真时执行,因此“可能不是”

您可以在声明中无条件地初始化该变量:

char str[DEF_LEN+1] = {'\0'};