【发布时间】:2020-11-07 04:50:16
【问题描述】:
check50 v3.1.2 生成的 cs50/problems/2020/x/recover 结果
:) recover.c 存在。
:) recover.c 编译。
:) 处理缺乏法医图像
:( 正确恢复 000.jpg
恢复的图像不匹配
:( 正确恢复中间图像
恢复的图像不匹配
:( 正确恢复 049.jpg
恢复的图像不匹配
我不知道我为什么会遇到这个问题。请帮助我,这可能是因为我对文件基础或其他内容不清楚。
#include <stdio.h>
#include <stdint.h>
typedef uint8_t BYTE;
int main(int argc, char *argv[])
{
//to check for command-line arguments
if( argc !=2 )
{
printf("Usage: ./recover imagename");
return 1;
}
//file pointer from where to read
FILE *inptr = fopen(argv[1], "r");
if( inptr == NULL)
{
fprintf(stderr, "File couldn't open");
return 1;
}
BYTE buffer[512]; //buffer for storing input data from file
char FILENAME[8]; //output file name storage
int counter=0; //to handle naming of file
FILE *outptr = NULL; //file pointer where to write
while(fread(buffer, 512, 1, inptr))
{
if(buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
{
sprintf(FILENAME, "%03i.jpg", counter);
outptr = fopen(FILENAME, "a");
if(outptr != NULL)
{
fclose(outptr);
counter++;
}
}
if(outptr != NULL)
{
fwrite(buffer, 512, 1, outptr);
}
}
fclose(outptr);
fclose(inptr);
}
【问题讨论】:
-
您需要先将关闭文件的位置移动到打开新文件的位置。现在你打开它并立即关闭它。您还应该使用“wb”作为模式。
-
将 first
if(outptr != NULL)块[跟随fopen] 移动到上面 @987654326 @。我们要关闭 previous 打开的输出文件。正如你所拥有的那样,关闭序列紧跟 new 文件的打开序列之后。如果您仍然遇到问题,请参阅我对cs50的回答 [无耻自我宣传] 在此处恢复:stackoverflow.com/questions/64638544/… -
有人请把评论变成答案。