Really clueless to why I get a segmentation fault on this problem, I have a hunch it may be something regarding the creation of the outfile. #include #include
int main(int argc, char *argv[])
{
int filenumber =0;
// 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 *outptr = NULL;
int *card = malloc(512);
char outfile[8];
do
{
// 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)
{
//char* outfile = NULL;
sprintf(outfile, "%03d.jpg" , filenumber);
outptr = fopen(outfile, "w");
if (outptr == NULL)
{
fclose(inptr);
fprintf(stderr, "Could not create %s.\n", outfile);
return 3;
}
fwrite(&card,1,512, outptr);
}
else if (filenumber > 1)
{
fclose (outptr);
//char* outfile = NULL;
sprintf(outfile, "%03d.jpg", filenumber);
outptr = fopen(outfile, "w");
if (outptr == NULL)
{
fclose(inptr);
fprintf(stderr, "Could not create %s.\n", outfile);
return 3;
}
fwrite(&card,1,512, outptr);
}
}
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
}
}
while (fread(card,1,512,inptr) == 512);
if (fread(card,1,512,inptr) < 512)
{
fclose (inptr);
fclose (outptr);
}
}