您的位置:首页 > 其它

fread的调用,返回值,及其文件换行符CR,LF。

2010-05-13 19:19 911 查看
函数声明: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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐