Я мог бы использовать некоторые рекомендации по этому pset от cs50. Ниже приведен код, который у меня есть. Я застрял в этой точке, где я понятия не имею, как действовать. Когда я запускаю программу, он выводит 16 файлов jpg, но я не могу их просматривать, поэтому что-то должно быть неправильно. Любые советы приветствуются.cs50 pset4 recover.c нужна консультация
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
// create buffer to store in
unsigned char buffer[512];
// array for filename is 8 for "000.jpg"
char jpgName[8];
// declaring counter for amount of jpegs
int jpgcounter = 0;
// open memory card file
FILE* inptr = fopen("card.raw", "r");
FILE* outptr = NULL;
if (inptr == NULL)
{
printf("Could not open %s.\n", "card.raw");
return 1;
}
// repeat until end of card
while(fread(buffer, sizeof(buffer), 1, inptr) == 1)
{
// find beginning of jpg
if(buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] == 0xe0 || buffer[3] == 0xe1))
{
// if allready a outptr file is open close it
if (outptr != NULL)
{
fclose(outptr);
}
// create filename for jpegs
sprintf(jpgName,"%03d.jpg", jpgcounter);
// open a new file with name defined by sprintf
FILE* outptr = fopen(jpgName, "w");
// write into the outfile from buffer
fwrite(&buffer, sizeof(buffer), 1, outptr);
// increment counter for jpegs
jpgcounter++;
}
}
fclose(inptr);
return 0;
}
Было ли ваше намерение писать только каждый * другой * 512-байтовый? потому что это то, что это делает. Если это не предназначено, у вас есть посторонний «fread» в вашем цикле. Поиск google «cs50 pset4 recovery» дает удивительное количество * правильных * реализаций, для справки, fyi. – WhozCraig
у вас есть один читать, а у вас есть другой сразу после него? возможно, вы хотите лучше описать, какова задача. также открыть файлы в двоичном режиме? –
задача заключалась в том, чтобы найти 16 jpegs в файле card.raw. И скопируйте их в отдельные файлы. –