在TC下用fread读取数据出错

来源:百度知道 编辑:UC知道 时间:2024/05/12 09:27:10
我在TC下用fread来从文件上读取数据,文件内只有一个数2.但是输出的结果为什么是3122?怎么修改程序?
程序如下:
#include<stdio.h>
main()
{
FILE *fp;
int i;
if ((fp=fopen("test13.dat","rb+"))==NULL)
{
printf("\nError\n");
exit (0);
}
fread(&i,sizeof(int),1,fp);
printf("\n%d\n",i);

--------------------------------
另外,如果将程序和文件中的整数换成一个字符,就可以正常输出了,这是为什么?

程序没有错,是你的test13.dat错了。要么他不是二进制数据文件,要么文件中的前两字节不是int数据2。
如果在命令行方式键入type test13.dat, 显示内容以2开始,说明test13.dat开头存放的是字符"2",不是int数据2.
前两字节是int数据2的数据文件,在命令行方式键入type test13.dat, 显示内容是个笑脸符号。看不到2才对。
照你的说法,输出的结果是3122,在命令行方式键入type test13.dat, 显示内容应该以2开始(0x32)。第二个字符显示为雌性符号(0x0C).
因此至少test13.dat中的2是字符‘2’,不是int数据2。

一般说来二进制数据文件不是用文本编辑程序写出来的。
用下面的程序重建test13.dat, 再用你的程序测试看看; 这样还可以认识二进制数据文件是什么样子,是怎样做出来的。

main()
{
int i=2;
FILE *fp = fopen("test13.dat", "wb");
fwrite(&i,sizeof(int),1,fp);
fclose(fp);
}

int fread(void *ptr, int size, int nitems, FILE *stream);

从文件流中读出的都是const char*,要强制转换,看函数原型