[英]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.