在我的解决方案上运行代码分析之后,我得到了一些 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告诉我设置字符串中的第一个元素,但显然无能为力,不是吗?
由于
答案 0 :(得分:3)
在您的代码段中,memset
仅在condition
为真时执行,因此“可能不是”。
您可以在声明中无条件地初始化该变量:
char str[DEF_LEN+1] = {'\0'};