CS50恢复分段故障问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CS50恢复分段故障问题相关的知识,希望对你有一定的参考价值。
该程序的目标是从文件中恢复JPG。
在CS50在线课程中,我一直在研究这个问题大约四五天,我无法理解。我继续得到分段错误,我不知道为什么。
我试过debug50并发现程序试图写入新文件时出错。为什么这样做我无法弄明白。
我一直在这个墙上撞墙,我已经完全删除并重写了多次。任何帮助将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "Usage ./recover file.type
");
return 1;
}
char *infile = argv[1];
FILE *inptr = fopen(infile, "rb");
if (inptr == NULL)
{
fprintf(stderr, "Could not open file designated to be recovered
");
fclose(inptr);
return 2;
}
int counter = 0;
FILE *img;
uint8_t buffer[512];
while (fread(buffer, sizeof(*buffer), 512, inptr))
{
if (buffer[0] == 0xff &&
buffer[1] == 0xd8 &&
buffer[2] == 0xff &&
(buffer[3] & 0xf0) == 0xe0)
{
if (counter > 0)
{
fclose(img);
}
char filename[8];
sprintf(filename, "%03i.jpg", counter);
img = fopen(filename, "w");
counter++;
}
if (counter !=0)
{
fwrite(buffer, sizeof(*buffer), 512, img);
}
}
fclose(img);
fclose(inptr);
return 0;
}
答案
char filename[7];
sprintf(filename, "%03i.jpg", counter);
由于NULL终止符qazxsw poi,七个字符的字符串占用8个字符。使数组变大,这样就不会写出它的末尾。