fread函数的用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fread函数的用法相关的知识,希望对你有一定的参考价值。
fread函数怎么从文件中读出一个整数?
看下面的一个例子,为什么会有错误?
#include <stdio.h>
int main()
FILE * fp;
int a;
fp=fopen("1.txt","r");
fread(&a,sizeof(int),1,fp);
printf("a is %d\n\n",a);
return 0;
附加的文件1.txt中只有一个整数,如45,但运行后得到的结果却不能显示这个数,why?
按二楼提供的代码改了一下,还是不能正确显示出b is 45,why?
还有一点,我现在是想先手工往文件中输入一些数据,然后在程序中将其读出,用于测试程序的正确性,避免每次都从键盘输入。fread函数不能做到这一点吗?
#include <stdio.h>
int main()
FILE * fp;
int a=45;
int b;
fp=fopen("1.txt","wb+");
fwrite(&a,sizeof(int),1,fp);///将a值写到文件中
fread(&b,sizeof(int),1,fp);
printf("b is %d\n\n",b);
fclose(fp);
return 0;
fread函数可从文件中读取二进制数据
语法:
A = fread(fid, count)
A = fread(fid, count, precision)
其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。
例子:
fid = fopen('alphabet.txt', 'r');
c = fread(fid, 5)'
c =
65 66 67 68 69
fclose(fid);
程序说明:alphabet文件中按顺序存储着26个英文字母,读取文件之前要先打开文件,由于未指定读取数据的类型,所以程序指定默认类型为无符号字符型即uchar,65、66、67、68、69代表A、B、C、D、E,文件用完还要记得关闭文件,以便释放指针。
扩展资料:
用 法
int feof(FILE *stream);
参数
流 :FILE结构的指针
注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。
参考资料:
fread--百度百科
int main()
FILE * fp;
int a=45;
int b;
fp=fopen("1.txt","wb+");
fwrite(&a,sizeof(int),1,fp);///将a值写到文件中.这句起作用,移动了文件指针。
fseek(fp,0,0);//将文件指针移回首部
fread(&b,sizeof(int),1,fp);
printf("b is %d\n\n",b);
fclose(fp);
return 0;
本回答被提问者采纳 参考技术B 在文本文件(这个txt文件)中,45是以字符串形式保存的,也就是说,实际上保存的是45这两个字符的ASCII值,也就是0x34和0x35,也就是十进制数字52和53,而fread()又是一个二进制读取函数,所以用它读取的数值就是这两个数值。
要想读取出45这个数字,应该用fscanf()函数。 参考技术C fread读的是二进制的数据,你在文件里如果直接键盘敲的45,是不能正确读出来的。
试试先把一个int型数据fwrite进文件里,再用fread读出来. 参考技术D 你读的是4个ASC码,当然不对,先读到字符串中,再变int
matlab 中关于fread函数的用法
用fread打开一个文件时,需要不需要把被打开文件放在某个特定位置?
fread函数在MATLAB中的功能:fread函数可从文件中读取二进制数据
用法:
A = fread(fid, count)
A = fread(fid, count, precision)
其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。
扩展资料:
fread函数在PHP中:
(PHP 4, PHP 5)
fread:读取文件(可安全用于二进制文件)
stringfread( int handle, int length )
fread()从文件指针handle读取最多 length 个字节。 该函数在读取完 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时就会停止读取文件,视乎先碰到哪种情况。
在区分二进制文件和文本文件的系统上(如 Windows)打开文件时,fopen() 函数的 mode 参数要加上 'b'。
当从网络流或者管道读取时,例如在读取从远程文件或popen()以及proc_open()的返回时,读取会在一个包可用之后停止。这意味着应该如下例所示将数据收集起来合并成大块。
如果只是想将一个文件的内容读入到一个字符串中,用file_get_contents(),它的性能比上面的代码好得多。
参考资料:百度百科-fread函数
参考技术A “fread”以二进制形式,从文件读出数据。语法1:[a,count]=fread(fid,size,precision)
语法2:[a,count]=fread(fid,size,precision,skip)
size: 不指定 :到尾返回读。
N : 读出N个数据,构成列向量。
inf : 读出fid指向的打开的文件的全部数据。
[M,N] : 读出N个数据,构成列向量,填入M*N矩阵
precision(精度)
precision(精度)规定了以浮点数、整型数、字符读出时位。matlab 的precision(精度)的表达式与c语言、fortran语言、是一致的。不规定precision(精度),则字符默认为: ucher、则数值默认为:双精度 。
以下precision(精度)将保证读出具有一致的体积。
MATLAB C or Fortran Descriphon(精度)
'char' 'char*l' 8 位,字符型
'uchar' 'unsigned char' 8 位
'schar' 'signed char' 8 位,字符型
'int8' 'integer*1' 8 位,整型数
'intl6' 'integer*2' 16 位,整型数.
'int32' 'integer*4' 32 位,整型数.
'int64' 'integer*8' 64 位,整型数
'uint8' 'integer*l' 8 位
'uintl6' 'integer*2' 16 位
'uint32' 'integer*4' 32 位
'uint64' 'integer*8' 64 位
'float32' 'real*4' 浮点数, 32 位
'float64' 'real*8' 浮点数, 32 位
以下precision(精度)将不保证读出具有一致的体积。
MATLAB C or Fortran Descriphon(精度)
'short' 'short' 16 位,整型数
'int' 'int' 32 位,整型数
'long' 'long' 32 (64) 位,整型数
'uShort' 'Unsigned short' 16 位
'uint' 'Unsigned int' 32 位
'ulong' 'unsigned long' 32 (64) 位
'float' 'float' 浮点数, 32 位
'double' 'double' 浮点数, 64 位
以下precision(精度)规定读出指定的体积n。
'bitN' N位,整型数 1<=N<=64
'ubitN' N位, 1<=N<=64 参考技术B 文件必须在Matlab可以搜索的路径中。
一般为提高速度,直接指定位置,比如指定C盘文件myfile
fid=fread('C:\myfile','r')本回答被提问者采纳 参考技术C 当前目录下也是个选择
以上是关于fread函数的用法的主要内容,如果未能解决你的问题,请参考以下文章