【发布时间】:2021-05-11 13:26:15
【问题描述】:
我正在学习 CS50 课程并卡在 PSET4 上。 我编写了一个从 card.raw 中恢复 JPG 的代码。 问题是我在运行我的程序后只得到 25 个选择(从 000.jpg 到 024.jpg),应该有 50 个。 我不知道为什么会这样。 你能给我指点吗:)
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
char *name[9] = {"card.raw"};
int i;
int a = -1;
char recovered[sizeof "050.jpg"];
uint8_t buffer[512];
int main(int argc, char *argv[])
{
//Check for valid quantity of command line arguments
if (argc != 2 || (strcmp (argv[1], *name) != 0))
{
printf("Usage: ./recover image\n");
return 1;
}
FILE *card = fopen(argv[1], "r");
//Check if file card.raw exists
if (card == NULL)
{
printf("Could not open file\n");
return 1;
}
while(fread(&buffer, 512, 1, card))
{
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && ((buffer[3] & 0xf0) == 0xe0))
{
a++;
sprintf(recovered, "%03d.jpg", a);
FILE *output = fopen(recovered,"w");
if (output == NULL)
{
printf("Could not create file %03d/n",a);
return 1;
}
fwrite(buffer, 512, 1, output);
while(fread(&buffer, 512, 1, card))
{
if ( !(buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && ((buffer[3] & 0xf0) == 0xe0)))
{
fwrite(buffer, 512, 1, output);
}
else
{
break;
}
}
fclose(output);
}
}
fclose(card);
return 0;
}
【问题讨论】: