簡體   English   中英

對於 while 循環,Fread 返回零

[英]Fread returns zero for the while loop

我在 cs50 中遇到 pset4 恢復的問題,我試圖從文件中將 512 個字節讀入緩沖區,但是當程序運行時似乎什么也沒發生。 我已經嘗試過 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);
     }
 }
}

我錯過了什么嗎?

謝謝

#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