我正在使用我从教程中抓取的这段代码片段。它旨在压缩来自输入文件的数据并将其放入输出文件。然而,它虽然运行时,给出了一个分段错误:zlib压缩错误
int map_Compress(char *inmapfile, char *outmapfile)
{
FILE *infile = fopen(inmapfile, "rb");
gzFile outfile = gzopen(outmapfile, "wb");
if (!infile || !outfile) return -1;
char inbuffer[1];
int num_read = 0;
unsigned long total_read = 0;
while ((num_read = fread(&inbuffer, 1, sizeof(inbuffer), infile)) > 0)
{
printf("%d\n",total_read);
total_read += num_read;
gzwrite(outfile, inbuffer, num_read);
}
fclose(infile);
gzclose(outfile);
return total_read;
}
而且它被称为是这样的:
int main()
{
if (map_Compress("maps/main.map", "maps/main.mz") < 0)
{
printf("Compression failed, couldn't open file(s)\n");
}
return 0;
}
如何处理该段错误的?我在屏幕上看到的所有内容是:
0
1
然后程序崩溃了......这里出了什么问题?我的输入文件有一些垃圾内容,所以不应该将数据压缩到输出文件中?
请帮帮忙,我敢肯定,这是一个简单的问题,我已经忽略了:)
所以你打算一次读取文件1字节?你可能想要调整缓冲区的大小(例如,在缓冲区[1024];'中的无符号字符)。 – WhozCraig
'printf()'转换说明符不匹配,传入的内容是'num_read'和'total_read'应声明为'size_t'。 – alk
这里的代码运行良好。由于在调用'map_Compress()'之前发生的不好的事情,最有可能的是你会目睹一个不正常的函数。 – alk