fgets函数 和 fputs

转载 2013年12月02日 13:55:10

From: http://blog.csdn.net/wuyu1125/article/details/7610652


fgets从指定的文件中读一行字符到调用者提供的缓冲区中,gets从标准输入读一行字符到调用者提供的缓冲区中。

#include <stdio.h>

char *fgets(char *s, int size, FILE *stream);
char *gets(char *s);
返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NULL

gets函数无需解释,Man Page的BUGS部分已经说得很清楚了:Never use gets()。gets函数的存在只是为了兼容以前的程序,我们写的代码都不应该调用这个函数。gets函数的接口设计得很有问题,就像strcpy一样,用户提供一个缓冲区,却不能指定缓冲区的大小,很可能导致缓冲区溢出错误,这个函数比strcpy更加危险,strcpy的输入和输出都来自程序内部,只要程序员小心一点就可以避免出问题,而gets读取的输入直接来自程序外部,用户可能通过标准输入提供任意长的字符串,程序员无法避免gets函数导致的缓冲区溢出错误,所以唯一的办法就是不要用它。

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

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

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

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

fputs向指定的文件写入一个字符串,puts向标准输出写入一个字符串。

#include <stdio.h>

int fputs(const char *s, FILE *stream);
int puts(const char *s);
返回值:成功返回一个非负整数,出错返回EOF

缓冲区s中保存的是以'/0'结尾的字符串,fputs将该字符串写入文件stream,但并不写入结尾的'/0'。与fgets不同的是,fputs并不关心的字符串中的'/n'字符,字符串中可以有'/n'也可以没有'/n'puts将字符串s写到标准输出(不包括结尾的'/0'),然后自动写一个'/n'到标准输出。


相关文章推荐

fgets与fputs函数

  • 2015-03-04 14:45
  • 21KB
  • 下载

字符串读写函数fgets和fputs

字符串读写函数fgets和fputs  一、读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数...

fgets_fputs函数

#include   /**   char* fgets(char*, int, FILE*);     第一个参数 存放读取到的字符    第一个参数 一次最多读取多少个字符  当碰到换行符时会返...

fgets函数与fputs函数

作者:陈刚,华清远见嵌入式培训中心讲师。 #include         char *fgets(char *s, int size, FILE *stream); 功能:从文件流读取一行,...

C++之函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结

字符串读写函数fgets和fputs 一、读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正...

C语言中gets、fgets以及fputs函数

1. gets函数 gets函数是不安全的,不推荐使用。如下代码: #include int main(void) { char name[5]; ...

函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结

字符串读写函数fgets和fputs 一、读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数...

fgetc fputc fgets fputs fprintf fscanf getc getchar gets putc putchar puts ungetc函数介绍

fgetc (由文件中读取一个字符) 头文件: include 函数声明: int fgetc(FILE * stream); 说明: fgetc()从参数stream所指的文...

函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结

字符串读写函数fgets和fputs一、读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数。表...

函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结

本文转自:http://happyshepherd.blog.sohu.com/97482172.html     字符串读写函数fgets和fputs 一、读字符串函数fgets函数的功...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)