本文主要是介绍fread的调用,返回值,及其文件换行符CR,LF。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
函数声明:int fread( void *buffer, size_t size, size_t num, FILE *stream );
说明:函数fread()读取[num]个对象(每个对象大小为size(大小)指定的字节数),并把它们替换到由buffer(缓冲区)指定的数组。数据来自给出的输入流,函数的返回值是读取的内容数量。
如果此时,需要读一个1024字节的文本,那么可以设置size为1,num为1024。当然,可以是size为1024,num为1。
问题也就来了,这两种方式哪个好呢。。。我习惯的是前者,这样的话fread的返回值为读入的字节数。及时读入有问题,也比较容易发现。而如果是后者,那么当fread没有读入预想到的长度(比如size = 1024)那么fread的返回值会是0这就比较麻烦了。。。
这还有问题可能更有意思,一开始还真没怎么注意到,先看一段MSDN:
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.
就是说如果按“文本模式”打开一个文件,那么在读入的时候,Windows默认的换行符CR+LF就会转换成一个单个的LF。
那么也就是说,如果一个文本文件的大小为1024字节,一共100行,那么fread最多只能读入924个字节。
在这种情况下,fread( buffer, 1, 1024, stream )的返回值将会是924个字节。
fread( buffer, 1024, 1, stream )的返回值,将会是0 。。。-_-!
编译环境是CodeBlock。
这篇关于fread的调用,返回值,及其文件换行符CR,LF。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!