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