CS50 pset4 восстановить, получил ошибку сегментации - PullRequest
0 голосов
/ 19 апреля 2020

Я получил ошибку сегментации с этим кодом. Кто-нибудь может помочь? Я попробовал несколько способов, но все еще не смог решить проблему. Я попытался заменить FILE *img = NULL на FILE *img, но выдает еще одну ошибку: variable 'img' is uninitialized when used in fwrite(buffer, 512, 1, img)

#include <stdio.h>
#include <cs50.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    //Open memory card
    if (argc != 2)
    {
        printf("Usage: ./recover image\n");
        return 1;
    }

    FILE *file = fopen(argv[1], "r");
    if (!file)
    {
        return 1;
    }

    //Read 512 bytes into a buffer
    int counter = 0;
    unsigned char buffer[512];
    char filename[8];
    FILE *img = NULL;

    while (fread(buffer, 512, 1, file) == 1)
    {
        if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] && 0xf0 == 0xe0))
        {
            //If first JPEG
            if (counter == 0)
            {
                //open a new file
                sprintf(filename, "%03i.jpg", counter);
                img = fopen(filename, "w");

                //write the array into the new file
                fwrite(buffer, 512, 1, img);
                counter++;
            }

            //if not first JPEG
            else
            {
                //close the file
                fclose(img);

                //open a new file
                sprintf(filename, "%03i.jpg", counter);
                img = fopen(filename, "w");

                //write the array into the new file
                fwrite(buffer, 512, 1, img);
                counter++;
            }
        }
        //Else, if already found new JPEG
        else
        {
            fwrite(buffer, 512, 1, img);
        }
    }

    //Close any remaining files
    fclose(img);
    fclose(file);

    return 0;
}

1 Ответ

0 голосов
/ 20 апреля 2020

Когда это if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] && 0xf0 == 0xe0)) равно , а не true (как при первом чтении), что делает программа?

Этот комментарий //Else, if already found new JPEG необходимо вставить в код; ie следующее write должно быть условным.

...