返回信息流函数原型: int fread(void *ptr, int size, int nitems, FILE *stream);
我的理解:
1、可以从文件的当前位置开始读数据,由ftell函数得到,不一定是文件开头,对吧?
2、返回值为读取元素的个数,什么意思?nitems不就是读取的元素个数吗?假如第一个参数不是指针类型,而是一个变量的地址,nitems为1,那返回值岂不只能为1?
这是一条镜像帖。来源:北邮人论坛 / cpp / #26011同步于 2009/7/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
fread函数的用法疑惑
cranberry
2009/7/9镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
1. 对。
2. fread是按块读取,一块的大小为size,至多读取nitems块。但是stream里不一定有那么多块。
参数ptr,size,nitems只是告诉fread把读出的数据块按顺序放到从地址ptr开始的长度为size×nitems字节的区域。因此返回值不是只能为1。这种情况下读到的数据块可能覆盖其他数据,导致程序运行异常,这算是缓冲区溢出。
nitems是设置你想得到的数据长度,但不一定每次读到的就是那么长,比如读到文件尾部了,可能返回的长度小于nitems
nitems的意义在于限制一次读取的最长长度,这个长度不能比你自己设计的存储数据的void *ptr的大小大,如果大于你自己开辟的储存空间,那样别的内存区域都被覆盖成读取到的内容,那样程序会死掉,说不定还能搞死其他程序