【发布时间】:2020-08-24 13:23:24
【问题描述】:
所以我正在尝试 CS50 Recover 练习(您需要在存储卡中搜索 jpg 文件,只要找到一个 - 打开一个新文件并将找到的 jpg 写入新文件)。 我的代码可以编译,但是当我运行 check50 命令时,我收到以下错误:
:( recovers 000.jpg correctly
recovered image does not match
:( recovers middle images correctly
recovered image does not match
:( recovers 049.jpg correctly
recovered image does not match
有人可以帮我弄清楚我做错了什么吗? 这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// Checking if the user entered a correct input:
if (argc!=2)
{
printf("You're not using it correctly!\n");
return 1;
}
// Opening the file in argv[1]
FILE *f=fopen(argv[1], "r");
// Validating that there's a file in argv[1]
if(f==NULL)
{
printf("File hasn't found\n");
return 1;
}
unsigned char bytes[512];
int counter=0;
FILE *img= NULL;
while (fread(bytes, 512, 1, f)==1)
{
if (bytes[0]==0xff && bytes[1]==0xd8 && bytes[2]==0xff && (bytes[3]&0xf0)==0xe0)
{
// If it's the first jpg found:
if (counter==0)
{
img=fopen("000.jpg", "w");
}
else
{
fclose(img);
char filename[8];
sprintf(filename,"%03i.jpg", counter);
img= fopen(filename, "w");
if (img==NULL)
{
printf("Couldn't open file\n");
return 1;
}
}
counter++;
fwrite(bytes, 512, 1, img);
}
}
fclose(img);
fclose(f);
}
【问题讨论】:
-
首先,尝试以二元模式打开文件(用于读取和写入):将
b添加到fopen()的模式字符串中,例如rb和wb。