所以在main.c中,我得到了这部分代码,用于打印加密的内容,如果它不是空的。它非常简单。
cpp错误是:
[main.c:40] :(错误)可能的空指针取消引用:加密 - 否则在第31行检查加密是否为空是多余的
代码:
char* encrypted = bmp_encrypt(key, text);
if(encrypted != NULL) //error points here (line 31)
{
printf("Encrypted:");
for(int i=0; i<strlen(text);i++)
{
printf("%x ", (unsigned char) encrypted[i]);
}
printf("\n");
}
else{printf("Encrypted:%s\n", encrypted);} //this is line 40
事情是,它按预期工作但cppcheck一直在烦我,我应该修复它吗?这样做是不对的?
答案 0 :(得分:2)
只有在else
为NULL时才会输入代码的encrypted
块。所以你将NULL指针传递给printf
。这可以调用undefined behavior。
由于您知道该点的指针为NULL,因此只需显式打印它为NULL:
else{printf("Encrypted: (null)\n");}