我从 cs50x pset4 恢复文件仅恢复文件的一角

问题描述 投票:0回答:1

我试图解决cs50x的pset 4恢复问题。每当我们发现 jgp 文件的正确标头时,我们就应该创建一个新图像,我尝试这样做。但由于某种原因,代码仍然只写入部分图像。每当代码发现正确的标头时,它就会增加 img_count 的值,然后才打开一个新图像。

问题链接:https://cs50.harvard.edu/x/2024/psets/4/recover/

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

typedef uint8_t BYTE;

int main(int argc, char *argv[])
{
    int j = 0;
    if (argc != 2)
    {
        printf("Usage: ./recover forensic_image_file\n");
        return 1;
    }
    FILE *for_image = fopen(argv[1], "r");
    if (for_image == NULL)
    {
        printf("Could not open %s.\n", argv[1]);
        return 1;
    }
    char img_recovered[8];
    img_recovered[3] = '.';
    img_recovered[4] = 'j';
    img_recovered[5] = 'p';
    img_recovered[6] = 'g';
    int img_count = -1;
    BYTE buffer[512];
    while (fread(buffer, 1, 512, for_image))
    {
        if ((buffer[0] = 255) && (buffer[1] == 216) && (buffer[2] == 255) && (buffer[3] / 16 == 14))
        {
            j++;
            img_count++;
            img_recovered[0] = (img_count / 100) + '0';
            img_recovered[1] = ((img_count % 100) / 10) + '0';
            img_recovered[2] = (img_count % 10) + '0';
            FILE *for_recovery = fopen(img_recovered, "w");
            fwrite(buffer, 1, 512, for_recovery);
            fclose(for_recovery);
        }
        else if (j > 0)
        {
            img_recovered[0] = (img_count / 100) + '0';
            img_recovered[1] = ((img_count % 100) / 10) + '0';
            img_recovered[2] = (img_count % 10) + '0';
            FILE *for_recovery = fopen(img_recovered, "a");
            fwrite(buffer, 1, 512, for_recovery);
            fclose(for_recovery);
        }
    }
    fclose(for_image);
}

c cs50 recover
1个回答
0
投票

你有一个错误。

在循环内的

if
语句中,您使用赋值运算符 (
=
) 代替比较运算符 (
==
)

改变:

(buffer[0] = 255)

进入:

(buffer[0] == 255)

由于该错误,代码将每 512 个字节更改为

0xFF

© www.soinside.com 2019 - 2024. All rights reserved.