我在互联网上发现了这个程序,所以我决定尝试一下,它将文件转换为另一种类型的文件。我通过终端在我的MAC OS X 10.9.1上编译并运行,但它给了我一个分段错误11。我该怎么做才能解决这个问题?
#include <stdio.h>
#define SRAM_SIZE (32 * 1024)
typedef FILE* pfile;
static unsigned char SRAM[SRAM_SIZE];
int main(void)
{
pfile in, out;
register int i;
in = fopen("input.sra", "rb");
for (i = 0; i < SRAM_SIZE; i++)
SRAM[i ^ ~0&3] = fgetc(in);
fclose(in);
out = fopen("output.sra", "wb");
for (i = 0; i < SRAM_SIZE; i++)
fputc(SRAM[i], out);
fclose(out);
return 0;
}
您没有错误检查。改变:
in = fopen("input.sra", "rb");
for (i = 0; i < SRAM_SIZE; i++)
SRAM[i ^ ~0&3] = fgetc(in);
fclose(in);
...
自:
in = fopen("input.sra", "rb");
if (in == NULL)
{
printf("Unable to open 'input.sra'.n");
return -1;
}
for (i = 0; i < SRAM_SIZE; i++)
SRAM[i ^ ~0&3] = fgetc(in);
fclose(in);
...
您也应该对输出文件执行相同的操作。有很多方法可能会失败,盲目访问未经测试的值是一种不好的做法。