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。
说明:函数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。
相关文章推荐
- 实现支持文件分块多点异步上传的 Web Services 及其客户端(非Web)应用程序调用相关异步执行的 Web Method
- C# winform 调用其他语言的Exe文件,并获取返回值
- 文本行尾的回车(CR)与换行符(LF)
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- PHP中调用外部程序,及其参数与返回值
- 回车符(CR)与换行符(LF), '\r'和'\n'的区别
- 【C#基础】方法及其调用、构造方法、out与ref参数及其返回值、方法重载、静态方法等简单介绍
- Java加载jar文件并调用jar文件当中有参数和返回值的方法
- java 中调用window系统中的文件,或者执行命令(shell、.CMD、.EXE)并获取返回值
- 利用 perl 调用 Java 类,通过读取文件 获取调用类返回值
- 实现支持文件分块多点异步上传的 Web Services 及其客户端(非Web)应用程序调用相关异步执行的 Web Method
- 自己遇到的ajax调用ashx文件无法获取返回值的一种情况
- 在以二进制文件打开方式打开文件的时候,fread返回值判断文件是否结束的问题
- 列举系统进程及其所调用的模块文件(Delphi XE2)
- C++ 调用Python文件方法传递字典参数并接收返回值
- C中文件读取fread和fwrite 返回值等注意事项
- JAVA 和 C# 调用外部.exe文件,传值并等等exe完成,获取返回值
- vbs 批量修改文件,bat 批处理文件调用执行vbs,并在cmd窗口打印返回值(vbs运行结果)
- C#调用批处理(bat)文件,并获取执行批处理(bat)文件后返回值
- 列举系统进程及其所调用的模块文件(Delphi XE2)