#include <stdio.h>
#include <stdlib.h
#include <stdint.h>
// I got information about what to do with the buffer
// from this stack exchangehttps://cs50.stackexchange.com/questions/2680/
//what-data-structure-do-you-use-to-store-the-buffer-in-recover
//typedef uint8_t BYTE;
//{
//BYTE buffer;
//}
int main(int argc, char *argv[])
{
// ensure proper usage
if (argc != 2)
{
fprintf(stderr, "You didn't enter two command line arguments\n");
return 1;
}
char *infile = argv[1];
// open input file
FILE *inptr = fopen(infile, "r");
if (inptr == NULL)
{
fprintf(stderr, "Could not open %s.\n", infile);
return 2;
}
FILE *card;
if (fread(&card,1,512,inptr) == 512)
{
int filenumber;
// would I then do something here about freading into the buffer
// what I just fread into card. I don't understand why I can't just
// access each part of card like an array
if (card[0] == 0xff &&
card[1] == 0xd8 &&
card[2] == 0xff &&
(card[3] & 0xf0) == 0xe0
{
filenumber++
if filenumber == 1
{
sprintf(outfile, %i.jpg, filenumber)
FILE *outptr = fopen(outfile, "w");
if (outptr == NULL)
{
fclose(inptr);
fprintf(stderr, "Could not create %s.\n", outfile);
return 3;
}
fwrite(&card,1,512, outptr);
}
if filenumber > 1
{
fclose (outptr);
sprintf(outfile, %i.jpg, filenumber)
FILE *outptr = fopen(outfile, "w");
if (outptr == NULL)
{
fclose(inptr);
fprintf(stderr, "Could not create %s.\n", outfile);
return 3;
}
}
}
}
else if (card[0] =! 0xff &&
card[1] =! 0xd8 &&
card[2] =! 0xff &&
(card[3] & 0xf0) =! 0xe0
{
if filenumber > 0
{
fwrite(&card,1,512, outptr);
}
//else if filenumber is 0 just do nothing, as I am doing
}
else
{
fclose (inptr);
fclose (outptr);
}
}
I've looked online, and I've read that I need to store the beginning of the JPEG in a buffer, but I'm not sure how to do that. Am I just freading the same thing I put into card into the buffer? What is the point of the buffer and what's wrong with my current implementation?