我正在调查魔术数字的使用,我已将我的实验简化为以下程序。我注意到当我在Xcode中使用静态分析功能时,我得到了消息"左操作数' =='是垃圾价值"用于temp[4]
比较。这是假阳性,如果是这样,为什么?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *input;
if(!(input = fopen("unknown_video.ext", "rb")))
return(EXIT_FAILURE);
int test_size = 10;
int b = 0;
int temp[test_size];
while(b < test_size)
{
if((temp[b] = fgetc(input)) == EOF)
break;
b++;
}
fclose(input);
if((temp[0] == 'R') && (temp[1] == 'I') && (temp[2] == 'F') && (temp[3] == 'F'))
{
printf("RIFF\n");
}
else if((temp[4] == 'f') && (temp[5] == 't') && (temp[6] == 'y') && (temp[7] == 'p'))
{
printf("QuickTime\n");
}
return(EXIT_SUCCESS);
}
答案 0 :(得分:4)
临时数组中的所有值都可能是酉的。
看行
while(b < test_size)
{
if((temp[b] = fgetc(input)) == EOF)
break;
b++;
}
我们有可能fgetc
立即返回EOF
,从而使所有以下测试都针对未初始化的值进行测试。
解决此问题的最简单方法是初始化临时数组。