fputs与fgets

来源:互联网 发布:淘宝会员名怎么更改 编辑:程序博客网 时间:2024/05/20 20:03

1.      fputs

函数名fputs 
  :送一个字符到一个流中 
  : int fputs(char *string, FILE *stream); 

 

说明:

fputs是一种函数,具有的功能是向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)

缓冲区string中保存的是以'/0'结尾的字符串,fputs将该字符串写入文件stream,但并不写入结尾的'/0'。与fgets不同的是,fputs并不关心的字符串中的'/n'字符,字符串中可以有'/n'也可以没有'/n'
程序例

#include <stdio.h> 


int main(void) 

   /* write a string to standardoutput */ 
   fputs("Hello world\n", stdout); 

   return 0; 

 

也可以输出到一个文件流

 

2.      fgets

函数名fgets 
  :fgets从指定的文件中读一行字符到调用者提供的缓冲区中

  : char *fgets(char *string, int size,FILE *stream); 

 

说明:

现在说说fgets函数,参数string是缓冲区的首地址,size是缓冲区的长度,该函数从stream所指的文件中读取以'/n'结尾的一行(包括'/n'在内)存到缓冲区string中,并且在该行末尾添加一个'/0'组成完整的字符串。

如果文件中的一行太长,fgets从文件中读了size-1个字符还没有读到'/n',就把已经读到的size-1个字符和一个'/0'字符存入缓冲区,文件中剩下的半行可以在下次调用fgets时继续读。

如果一次fgets调用在读入若干个字符后到达文件末尾,则将已读到的字符串加上'/0'存入缓冲区并返回,如果再次调用fgets则返回NULL,可以据此判断是否读到文件末尾。

注意:

对于fgets来说,'/n'是一个特别的字符,而'/0'并无任何特别之处,如果读到'/0'就当作普通字符读入。如果文件中存在'/0'字符(或者说0x00字节),调用fgets之后就无法判断缓冲区中的'/0'究竟是从文件读上来的字符还是由fgets自动添加的结束符,所以fgets只适合读文本文件而不适合读二进制文件,并且文本文件中的所有字符都应该是可见字符,不能有'/0'
程序例

#include <string.h> 

#include <stdio.h> 

int main(void) 

   FILE *stream; 
   char string[] = "This is atest"; 
   char msg[20]; 

   /* open a file for update */ 
   stream =fopen("DUMMY.FIL", "w+"); 

   /* write a string into the file*/ 
   fwrite(string, strlen(string), 1,stream); 

   /* seek to the start of the file*/ 
   fseek(stream, 0, SEEK_SET); 

   /* read a string from the file */ 
   fgets(msg, strlen(string)+1, stream); 

   /* display the string */ 

   printf("%s", msg); 

   fclose(stream); 
   return 0; 

0 0
原创粉丝点击