静态分析奇怪的结果

时间:2014-03-20 14:51:29

标签: c clang

我正在调查魔术数字的使用,我已将我的实验简化为以下程序。我注意到当我在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);
}

1 个答案:

答案 0 :(得分:4)

临时数组中的所有值都可能是酉的。

看行

while(b < test_size)
{
  if((temp[b] = fgetc(input)) == EOF)
    break;

  b++;
}

我们有可能fgetc立即返回EOF,从而使所有以下测试都针对未初始化的值进行测试。

解决此问题的最简单方法是初始化临时数组。