c中的fread()出错,没有预期的outut

时间:2018-03-27 18:50:32

标签: algorithm fopen checksum fread

我正在为我的一个类制作校验和算法,我想读取两个二进制文件并通过校验和算法运行它们。校验和算法有效(我已经尝试将我想要的东西输入到终端并且它有效)但我无法让我的fread()工作。我已经尝试打印输出,他们打印正确的东西,但最后是一堆其他随机数字和字母。

这是我的代码:

int main(int argc, char *argv[])
{
  FILE *ptr1;
  FILE *ptr2;

  ptr1 = fopen("test1.bin","rb");
  ptr2 = fopen("test2.bin","rb");

  char file1[sizeof(ptr1)], file2[sizeof(ptr2)];
  char sum[sizeof(ptr1)], comp[sizeof(ptr1)];

  fread(file1,sizeof(file1),1,ptr1);
  fread(file2,sizeof(file2),1,ptr2);

  fclose(ptr1);
  fclose(ptr2);



/* char file1[20], file2[20];
  char sum[20], comp[20];

  printf("enter 1\n");
  scanf("%s",&file1);
  printf("enter 2\n");
  scanf("%s",&file2);*/

  if(strlen(file1)==strlen(file2)) {
      char next='0';
      int length = strlen(file1);

      for(int i=length-1;i>=0;i--)
    {
      if(file1[i]=='0' && file2[i]=='0' && next=='0')
        {
          sum[i]='0';
          next='0';
        }
      else if(file1[i]=='0' && file2[i]=='0' && next=='1')
        {
          sum[i]='1';
          next='0';
        }
      else if(file1[i]=='0' && file2[i]=='1' && next=='0')
        {
          sum[i]='1';
          next='0';
        }
      else if(file1[i]=='0' && file2[i]=='1' && next=='1')
        {
          sum[i]='0';
          next='1';
        }
      else if(file1[i]=='1' && file2[i]=='0' && next=='0')
        {
          sum[i]='1';
          next='0';
        }
      else if(file1[i]=='1' && file2[i]=='0' && next=='1')
        {
          sum[i]='0';
          next='1';
        }
      else if(file1[i]=='1' && file2[i]=='1' && next=='0')
        {
          sum[i]='0';
          next='1';
        }
      else if(file1[i]=='1' && file2[i]=='1' && next=='1')
        {
          sum[i]='1';
          next='1';
        }
      else
        break;
    }

      for (int i=0;i<length;i++)
    {
      if(sum[i]=='0')
        comp[i]='1';
      else
        comp[i]='0';
    }

      if(next=='1')
    next='0';
      else
    next='1';

      printf("\nChecksum=%c%s",next, comp);
  }
  else {
    printf("\nInput Lengths do not match");
  }
}

test1.bin和test2.bin是两个包含8个字节二进制文件的文件。我尝试过使用

printf("this is file 1 %s\n", file1)
printf("this is file 2 %s\n", file2)

帮助调试并输出

this is file 1 01001001dL
this is file 2 01001000P5L

我的错误是什么?我不擅长C所以我确信它很简单。

1 个答案:

答案 0 :(得分:0)

您为sizeof(ptr1)分配file1个字节,但这意味着类型FILE*的大小,可能是4.如果您知道您的文件恰好包含8个字节,请执行在那里写8。