我正在研究魔术数字的使用,我已经将我的实验简化为以下程序。我注意到,当我在Xcode中使用静态分析函数时,我得到了用于temp[4]比较的消息“‘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);
}发布于 2014-03-20 15:00:39
临时数组中的所有值都可能是统一的。
看着这条线
while(b < test_size)
{
if((temp[b] = fgetc(input)) == EOF)
break;
b++;
}我们有可能fgetc立即返回EOF,从而对未初始化的值进行所有下面的测试。
解决这个问题的最简单方法是初始化temp数组。
https://stackoverflow.com/questions/22536676
复制相似问题