C语言中fread函数,当文件流缓冲中剩余长度小于需要读取的长度时的问题 10
当输入文件为二进制,长度远大于4096的时候。由于文件流缓冲默认为4095.那么假设已经读取了4080个字节之后,即fp_in->_cnt的值为15,再使用fread(g...
当输入文件为二进制,长度远大于4096的时候。
由于文件流缓冲默认为4095.
那么假设已经读取了4080个字节之后,即fp_in->_cnt的值为15,再使用fread(g_buffer, 1, 20, fp_in);函数打算一次性读出20个字节时,程序异常,fread执行时报Access Violation.
有高手帮忙解释下吗?按道理说,文件流缓冲中剩余长度不足的时候,应该会自动从外存文件中一次性读入4096个字节到缓冲中才对呀,有高手帮忙指点下吗? 展开
由于文件流缓冲默认为4095.
那么假设已经读取了4080个字节之后,即fp_in->_cnt的值为15,再使用fread(g_buffer, 1, 20, fp_in);函数打算一次性读出20个字节时,程序异常,fread执行时报Access Violation.
有高手帮忙解释下吗?按道理说,文件流缓冲中剩余长度不足的时候,应该会自动从外存文件中一次性读入4096个字节到缓冲中才对呀,有高手帮忙指点下吗? 展开
2个回答
展开全部
你一顿能吃四两饭,你现在已经吃了三两了,现在又有四两摆在你的面前,你不能一次把这四两又吃下去的。
程序同理,fread函数的原型如下:
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
只能读到等于buffer指向的内存区的大小的count的。
程序同理,fread函数的原型如下:
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
只能读到等于buffer指向的内存区的大小的count的。
追问
你没理解我的意思,
buffer指向的内存区的大小的count是够大的。
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
关键问题是(count*size)如果大于stream->_cnt时,难道fread就搞不定了吗?
追答
如果大于count,则读一次等于count的值,再用如lseek等函数把指针指向你现在已经读到了的位置,再读。一般用一个循环。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询