我正在使用我從教程中抓取的這段代碼片段。它旨在壓縮來自輸入文件的數據並將其放入輸出文件。然而,它雖然運行時,給出了一個分段錯誤: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