【问题标题】:CS50 Pset4 Recover: recovers 049.jpg correctly, recovered image does not matchCS50 Pset4 Recover:正确恢复 049.jpg,恢复的图像不匹配
【发布时间】:2020-11-01 06:06:38
【问题描述】:

尝试提交时,CS50 pset4 recover.c 报错

:) 恢复.c 存在。 :) recover.c 编译。 :) 处理缺乏法医图像 :) 正确恢复 000.jpg :) 正确恢复中间图像 :( 正确恢复 049.jpg 恢复的图像不匹配

我的代码是

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

#define FAT 512

typedef uint8_t BYTE;

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        fprintf(stderr, "Usage: name of forensic image from which to recover JPEGs");
        return 1;
    }
    FILE *file = fopen(argv[1], "r");
    if (!file)
    {
        fprintf(stderr, "Could not open %s.\n", argv[1]);
        fclose(file);
        return 2;
    }
    char *filename = malloc(50 * sizeof(int));

    BYTE buffer[FAT];
    if (!filename)
    {
        return 3;
    }
    FILE *curImg;
    int count = 0;
    while (!feof(file))
    {
        fread(buffer, sizeof(buffer), 1, file);
        if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
        {
            if (count > 0)
                fclose(curImg);

            sprintf(filename, "%03i.jpg", count);
            curImg = fopen(filename, "w");
            if (curImg)
                fwrite(buffer, sizeof(buffer), 1, curImg);
            count++;
        }
        else
        {
            if (curImg)
                fwrite(buffer, sizeof(buffer), 1, curImg);
        }
    }
    free(filename);
    fclose(file);
    return 0;
}

我不明白,有什么问题。谁能帮帮我?

【问题讨论】:

  • 你能显示恢复的图像和应该恢复的图像吗?你能显示输入吗?你从什么恢复?失真?加密?包装?请提供更多信息,假设这里不是每个人都知道 cs50 作业。
  • 恢复图像成功。已经解决了。谢谢
  • 使用任何输入/输出函数而不检查返回值是不行的!
  • 这能回答你的问题吗? CS50 recover segmentation fault Oct 2020

标签: c cs50 recover


【解决方案1】:

“文件结束指示器”发生了这种情况。这意味着在写入文件之后,会在最后一个文件中写入一段时间。我只是在

中添加一个条件
if (curImg)
     fwrite(buffer, sizeof(buffer), 1, curImg);

替换为

if (curImg && !feof(file))
     fwrite(buffer, sizeof(buffer), 1, curImg);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2018-07-22
    • 2021-05-11
    • 2020-08-02
    相关资源
    最近更新 更多