C语言 读取二进制文件
代码如下,为什么每次运行的结果都不一样?#include<stdio.h>
int main()
{
FILE *Fout;
int magic1, magic2, errCode, offset, offset0, version;
int err;
Fout = fopen("D:\1_data\\C\\z_exercise\\5a.out", "rb");
fseek(Fout, 0L, 0);
fread(&magic1, 4, 1, Fout);
fread(&magic2, 4, 2, Fout);
printf("%d", magic1);
return 0;
} 本帖最后由 jackz007 于 2019-10-18 11:13 编辑
这个文件路径表达显然是有问题的
Fout = fopen("D:\1_data\\C\\z_exercise\\5a.out", "rb") ;
所以,估计问题出在文件根本没有被打开,更别提读出内容了!
把代码改一改试试看:
#include<stdio.h>
int main()
{
FILE * Fout ;
int magic1, magic2, errCode, offset, offset0, version ;
int err ;
if((Fout = fopen("D:\1_data\\C\\z_exercise\\5a.out", "rb")) != NULL) {
fseek(Fout, 0L, 0) ;
fread(&magic1, 4, 1, Fout) ;
fread(&magic2, 4, 2, Fout) ;
printf("%d\n", magic1) ;
} else {
fprintf(stderr , "\n\n") ;
fprintf(stderr , "\tError : cann\'t open file !\n") ;
}
return 0 ;
}
看看屏幕上会显示什么? D:\1_data\\C\\z_exercise\\5a.out
换个再试试吧 本帖最后由 superbe 于 2019-10-18 13:58 编辑
测试了下,发现了两个问题:
1. fopen("D:\1_data\\C\\z_exercise\\5a.out", "rb");路径里的 \ 都要用 \\ 或 / 代替,所以第一个 \ 是不对的。
2. fread(&magic2, 4, 2, Fout); 里第三个参数 2 应该是 1,magic2是int型,一般4个字节,如果是2表示读 2 * 4(第二三参数相乘) = 8个字节,溢出了。
最好加上一个判断:
if(Fout == NULL){
printf("open error!");
return 0;
}
页:
[1]