fread()函数如何判断是否到文件末尾?

当用fread()函数将文件内容存到数组时,在靠近文件结尾的时候,会出现剩余的内容不足以填满数组或者已经到达结尾,这时要如何判断实际读出的数据大小?

fread(从文件流读取数据)
相关函数 fopen,fwrite,fseek,fscanf

表头文件 #include<stdio.h>

定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);

函数说明 fread()用来从文件流中读取数据。
参数stream为已打开的文件指针,
参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。

Fread()会返回 实际 读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。

返回值 返回实际读取到的nmemb数目。

附加说明

范例 #include<stdio.h>
#define nmemb 3
struct test
{
char name[20];
int size;
}s[nmemb];
main()
{
FILE * stream;
int i;
stream = fopen(“/tmp/fwrite”,”r”);
fread(s,sizeof(struct test),nmemb,stream);
fclose(stream);
for(i=0;i<nmemb;i++)
printf(“name[%d]=%-20s:size[%d]=%d\n”,i,s[i].name,i,s[i].size);
}

执行 name[0]=Linux! size[0]=6
name[1]=FreeBSD! size[1]=8
name[2]=Windows2000 size[2]=11

========================

feof(检查文件流是否读到了文件尾)
相关函数 fopen,fgetc,fgets,fread

表头文件 #include<stdio.h>

定义函数 int feof(FILE * stream);

函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。

返回值 返回非零值代表已到达文件尾。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-02-16
函数的原型如下
size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);

fread returns the number of full items actually read, which may be less than count if an error occurs or if the end of the file is encountered before reaching count. Use the feof or ferror function to distinguish a read error from an end-of-file condition. If size or count is 0, fread returns 0 and the buffer contents are unchanged. If stream or buffer is a null pointer, fread invokes the invalid parameter handler, as described in Parameter Validation. If execution is allowed to continue, this function sets errno to EINVAL and returns 0.

可见根据msdn,返回值表示具体读了多少出来,你根据返回值来做吧,呵呵。多看msdn

See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these, and other, error codes.

Remarks
The fread function reads up to count items of size bytes from the input stream and stores them in buffer. The file pointer associated with stream (if there is one) is increased by the number of bytes actually read. If the given stream is opened in text mode, carriage return–linefeed pairs are replaced with single linefeed characters. The replacement has no effect on the file pointer or the return value. The file-pointer position is indeterminate if an error occurs. The value of a partially read item cannot be determined.

This function locks out other threads. If you need a non-locking version, use _fread_nolock.

ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vccrt/html/9a3c1538-93dd-455e-ae48-77c1e23c53f0.htm本回答被提问者采纳
第2个回答  2006-03-02
fread()返回的size_t类型数值就是实际大小啊,地球人都知道了!!!
第3个回答  2006-03-02
fread()函数的返回值就是实际读取的大小
对于用fopen函数打开的文件可以用feof来判断文件指针是否已到达文件尾

fread()函数如何判断是否到文件末尾?
feof(检查文件流是否读到了文件尾)相关函数 fopen,fgetc,fgets,fread 表头文件 #include<stdio.h> 定义函数 int feof(FILE * stream);函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。返回值 返回非零值代...

c语言fread()返回总是0
1、返回0通常是读到了文件尾。如果确认没有到文件尾,可以用ferror检查错误。if ( ferror ( fp ) ){ printf("File read error.");} 2、C语言中:fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件...

读文件时系统怎样判断读到行尾
回答:feof(检查文件流是否读到了文件尾) 相关函数 fopen,fgetc,fgets,fread 表头文件 #include<stdio.h> 定义函数 int feof(FILE * stream); 函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。 返回值 返回非零值代表已...

C语言 fread读取时截止的标志
feof 也可以判断是否到文件结尾 fread 本身返回读到的长度,如果读到的长度,没有缓冲区大,说明可能是文件结尾了 size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );~

c语言中用fread和fwrite函数读数据时怎样判断文件结束?
使用feof()来判断,返回非0就是结束了。if (feof(fp))... 此时就表明文件结束了,别再读了

matlab中关于fread函数的用法
`fread`函数是MATLAB中用于从文件中读取数据的函数。其基本语法为:matlab [data, count] = fread 其中:`fileID`:文件的标识符,可以通过`fopen`函数获得。`size`:指定读取的数据大小和类型,如`Inf`表示读取至文件末尾。`precision`:可选参数,指定数据读取的精度,如`'uint8'`表示无符号8位...

fread函数
从ferror和feof获取错误信息或检测是否到达文件结尾.例如:include <stdio.h> include <string.h> int main(void){ FILE *stream;char msg[] = "this is a test";char buf[20];if ( (stream = fopen("DUMMY.FIL", "w+")) == NULL) { fprintf(stderr,"Cannot open output file.\\n")...

关于fread读取数据时指针的位置问题
最后一条数据输出2次这个问题我也遇到过,是检测文件是否到末尾的问题,我用while(!feof(fp))就会出现这种问题,应该是判断文件指针是否到文件末尾出现错误了,具体原因我也不清楚,不过很容易解决,就是利用类似楼上的r的方式。while(1){ if(fread(&A,sizeof(struct employee),1,fp)!=1)bre...

fread函数的用法
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 ...

c语言文件操作fwrite和fread
fread是C语言标准为中的一个函数。它从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。fwrite是C语言标准库中的一个函数,指向文件写入一个数据块。示例如下:\/\/读取一个完整的文件#include <stdio.h>#include <...

相似回答