函数fgets()与函数gets()都在读人的字符序列之后自动存储字符串结束标记'\0’,使其成为字符串,并返回字符率的首字符指针。但它们有差别,函数fgets()除增加整型参数和文件指针参数之外,还在读到换行符时,存储换行符,而函数gets()不存储换行符。 函数fputs()的作用是将字符串复制到文件。其中字符串的结束标记符是不复制的,也不在复制的字符序列之后另外再添加换行符,这一点与函数puts()不同。 7.文件定位库函数 利用前面介绍的函数进行文件操作,只能顺序读写文件。然而,在有些场合,还需要能对文件作随机存取。实际上,因文件是存储在外部存储介质上的数据流,程序即刻能读写的是文件某一位置上的数据,这个位置称为文件的当前读写位置。对于顺序读写情况,每读写一个字符后,当前位置就自动向后移一个字符位置。对于允许随机读写的文件,要读写其他别的位置上的数据,就得改变文件当前读写位置。实现这样的移动可调用库函数rewind()和fseek()来实现。另设有函数ftell()用于查询文件当前读写位置。 函数rewind()的说明形式为 void rewind( FILE *fp) 函数rewind()的作用是使文件当前位置重新回到文件之首。该函数没有返回值。 函数fseek()是实现文件随机存取的最主要函数,用它可以将文件的当前位置移到文件的任意位置上。所谓文件的随机存取(或随机读写),是指读写完一个字符(或字节)之后,并不一定要读写其后继的字符(或字节),可以改变当前位置,去读写文件中其他位置上的字符(或字节)。 函数fseek()的说明形式为 fseek(FILE *fp, long offset, int ptrname) 其中ptname表示定位基准。只允许0,l或2。其中0代表以文件首为基准,1代表以当前位置为基准,2代表以文件尾为基准。0、l和2分别被定义为名称SEEK-SET、SEEK-CUR和SEEK-END。long型形参offset是偏移量,表示以prname为基准,偏移的字节数。因它是long型形参,当以整数作为它的实参调用函数 fseek()时,直在常数之后加上字母L,表示是long型常量。见下面调用函数fseek()的例子: fseek(fp,4OL,SEEK-SET); fseek(fp,20L,SEEK-CUR); fseek(fp,-30L,SEEK-END); 分别表示将文件的当前位置定于离文件头4O个字节处、将文件当前位置定于离当前位置20个字节处、将文件的当前位置定于文件尾后退30个字节处。 函数fseek()一般用于二进制文件的随机读写,这是因为数据在二进制文件中的表示形式与数据在内存中的表示形式相同,各种类型的数据表示都有确定的字节数。而数据在正文文件中的表示形式与数据在内存中的表示形式不同,它们在输入输出时,数据的内外表示形式要进行转换,数值类型的数据在正文文件中的表示没有固定的字节数,计算位置时会发生混乱。 函数ftell()用于得到文件当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。调用函数ftell()就能非常容易地确定文件的当前位置。 函数ftell()的说明形式为 long ftell(FILE *fp) 利用函数ftell()也能方便地知道一个文件的长。如以下语句序列: fseek(fp,OL,SEEK-END); len=ftell(fp) 首先将文件的当前位置移到文件的末尾,然后调用函数ftell()获得当前位置相对于文件首的偏移,该偏移值等于文件所含字节数。 8.文件错误测式库函数 文件处理程序常用输入输出库函数的返回值来判断输入输出是否发生错误,也可以调用文件错误测试函数了解刚完成的文件输入输出函数的调用是否有错。文件错误测试函数的说明形式为 int ferror(FILE *fp) 函数的返回值是与文件指针中相联的最近一次文件库函数调用是否发生错误。若有错,函数返回非0值,若没有错误,函数返回0值。通常在这非0值,详细指出错误的类别和原因。本新闻共 6页,当前在第 5页 1 2 3 4 5 6 |