简体   繁体   English

对于 while 循环,Fread 返回零

[英]Fread returns zero for the while loop

I have a problem with pset4 recover in cs50, I'm trying to read 512 bytes into a buffer from a file but when the program operates nothing seems to happen.我在 cs50 中遇到 pset4 恢复的问题,我试图从文件中将 512 个字节读入缓冲区,但是当程序运行时似乎什么也没发生。 I have tried debug50 and it looks like there's a problem with the while loop我已经尝试过 debug50,看起来 while 循环有问题

while(fread(buffer,sizeof (BYTE),512,f))
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef uint8_t BYTE;
 
int main(int argc, char *argv[])
{
 FILE *f=fopen(argv[1],"r");
 FILE *img= NULL;
 int count=0;
 char* filename= NULL;
 BYTE buffer[512];
 
 while(fread(buffer,sizeof (BYTE),512,f))
 {
     if(buffer[0]==0xff && buffer[1]==0xd8 && buffer[2]==0xff && ((buffer[3]&0xf0)==0xe0) )
     {
         if(img==NULL)
         {
             sprintf(filename,"%03i.jpg",count);
             count++;
             img=fopen(filename,"w");
             fwrite(buffer, sizeof(BYTE), 512, img);
         }
        else
        {
             fclose(img);
             sprintf(filename,"%03i.jpg",count);
             count++;
             img=fopen(filename,"w");
             fwrite(buffer, sizeof(BYTE), 512, img);
        }
     }
    if(img!=NULL)
     {
        fwrite(buffer, sizeof(BYTE), 512, img);
     }
 }
}

Am I missing something?我错过了什么吗?

Thanks谢谢

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef uint8_t BYTE;
 
int main(int argc, char *argv[])
{   
    if (argc != 2 )
    {
        printf("Usage: ./recover image\n");
        return 1;
    }

    FILE *f=fopen(argv[1],"r");
 
     if(f == NULL)
     {
          printf("Couldn't open\n");
           return 1;
     }
 
     FILE *img= NULL;
     int count=0;
     char filename[1000];
     BYTE buffer[512];
 
     while(fread(buffer,sizeof (buffer),1,f))
     {
          if(buffer[0]==0xff && buffer[1]==0xd8 && buffer[2]==0xff && ((buffer[3]&0xf0)==0xe0) )
          {
      
             if(img!=NULL)
                    fclose(img);
        
             sprintf(filename,"%03i.jpg",count);
             count++;
             img=fopen(filename,"a");
             if (img == NULL) 
              {
                   printf("Could not create file %03i/n", count );
                   return 1;
              }
     }
      
    if(img!=NULL)
             fwrite(buffer, sizeof(buffer), 1, img);
    
 }
     if(img!=NULL)
     {
        fclose(img);
     }
     fclose(f);
     return 0;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM