遇文件尾测试结束c语言,[转载]Fortran和C语言测试文件尾的方法

编程入门 行业动态 更新时间:2024-10-24 12:29:48

遇文件尾测试结束c<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言,[转载]Fortran和C语言测试文件尾的方法"/>

遇文件尾测试结束c语言,[转载]Fortran和C语言测试文件尾的方法

1. int ch = fgetc(fp);

if(ch == EOF)break;

2. fgets返回NULL

3. fread返回0

还有适当的配合文件指针来使用

文件指针从0开始到size-1(其中size尾文件大小),其中后面还有一个虚拟的指针size位置(文件尾)

打开文件时候,指针指向0。

ps:文件指针到底指向哪呢?实际上就是指向将要读取的一个字节的地址,以前读过的就不算了。所以刚开始打开文件的时候,文件指针的偏移量就是,指向文件的第一个字节,因为它还没有被读取。fseek(fp,

0,

SEEK_END)就是跳过整个文件,指向文件尾巴。那个实际不存在的地方。如果此时getc的话就会返回-1出错了。但是此时调用feof是不会返回非0(遇到文件尾的),因为feof只是返回系统的一个statment的值,它是要getc

gets fread等等系统调用修改的。所以再三强调feof不是一个好方法。

fseek(fp, 0,

SEEK_END)后文件指针指向size,如果此时feof(fp)的话,是不会返回非0的,原因就是根本没有系统调用改变了那个statment的值。所以还是返回0,这样如果不做判断直接getc的话,就会获得一个-1到自己的程序中就会出错了。当然也因为这个-1(虽然你么有判断,但是系统害是该了你的statment)所以下一次调用feof的时候就会返回非0,然后才停止读取数据。但是已经错误了,所以大家要小心了啊

二进制文件的话,fread fwrite配合文件指针用吧。

首先解释一下只能用fread和fwrite的原因,也许有人不知道的吧-

-。一句话,二进制文件里面可能有大量的asc码值等于0 或者 某个字节序列 为 0xffffffff 也就是十进制-1. 比如当你int

ch=getc(fp)的时候有可能获得-1但是却么有到达文件尾。或者fgets得到0,包括0以及后面的所以数据都会被你的应用程序所抛弃。这就是为什么有人拷贝二进制文件然后文件远比以前的要小的原因。反正一句话,二进制文件用这些函数来搞就是找死。。。

fopen文件打开时候有个binary的模式,大家不能被误解了,只不过windows系统有点字符转换有点影响。根本不是说是把文件真的用二进制格式打开或者用asc格式打开了。因为说到底,文件的内容都是一样当的,在怎样打开它的内容不会变的,每个字节每个位的内容都是不会变的。从理论上来解释说就是,文件是一个物理物质,稳定性。平常遇到的按照什么asc模式和二进制模式,实际上都是实际的需要才有用的。比如可执行文件啊,图片啊,mp3啊,读写的话只要用fread

fwrite就行了啊。但是有人会说,读写二进制的文件为什么还要fopen的时候指定b模式呢。实际上,只是用于windos的,需要澄清,linux下面是一样的。windows的话如果不选b模式,系统内核会自动吧n

转换成

rn两个字符,反之b模式则没有。就是说windows下面b模式文件就不同了。这时候,对于普通的asc文件,b模式没有影响,系统内核都会自动转换,对用户来说是不用担心的。

但是对于二进制文件就不同了,所以需要指定。

更多推荐

遇文件尾测试结束c语言,[转载]Fortran和C语言测试文件尾的方法

本文发布于:2024-02-11 22:41:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1684007.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言   文件   测试   结束   方法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!