fread()函数给出了垃圾

时间:2015-02-09 18:03:49

标签: c

我无法理解为什么这个小C代码不起作用

#include <stdio.h>

main(int argc,char **argv){
     FILE *fp,
     int i;
     size_t elem_read;
     int buffer[100];
     fp=fopen(argv[1],"r");
     elem_read=fread(buffer,sizeof(int),100,fp);
     for(i=0;i<elem_read;i++)
            fprintf(stderr,"%d\t",buffer[i]);
     fclose(fp);
}

为了缩短代码,我没有做任何错误检查,但它应该工作...我已经尝试使用txt和bin文件来读取数字并打印出来。我想我明白为什么这不适用于txt文件,但我不明白为什么它没有.bin文件?我有一个包含4个整数的文件:10 10 10 10,但是当我尝试使用./a.out file.bin运行它时,我得到一些随机数字(垃圾输出),问题出在哪里?

1 个答案:

答案 0 :(得分:6)

它不适用于.bin文件的原因是,如果您在文本编辑器中看到10 10 10 10,则表明您有一个.bin扩展名的文本文件。但是,您读取的值不是“垃圾”:它们是表示文件编码中文本的字节,重新解释为整数。

为了将数字读回int s,编写一个将二进制数写入文件的程序,如下所示

FILE *fp = fopen("test", "wb");
int[] data = {10, 10, 10, 10};
fwrite(data, sizeof(int), sizeof(data)/sizeof(int), fp);
fclose(fp);

然后使用您的程序阅读它们。