gets函数和fgets函数
来源:互联网 发布:mysql服务安装失败 编辑:程序博客网 时间:2024/06/05 03:48
1、 gets函数
gets函数从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。
gets函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。这个事实导致gets函数只适用于玩具程序,为了避免这种情况,我们可以用fgets(stdin) (fgets实际上可以读取标准输入,即大多数情况下的键盘输入)来替换gets()。在V7的手册(1979年)中说明:为了向后兼容,gets删除换行符,gets并不将换行符存入缓冲区(以‘\0’替代)。
注意:
因为Linux 和 windows的文件在换行符上编码不一样,linux的换行是\0,windows的换行是\13\0.
LINUX下编译C程序时,会出现警告:warning: the `gets' function is dangerous and should not be used.
2、fgets函数
fgets函数从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize-1个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。
函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
注意:
gets从终端读入是的字符串是用\0结束的,而fgets是以\n结束的.
例子:
- fgets()函数原型
- fgets(char * s,int size,FILE * stream);//用fgets(tempstr,9,stdin)//tempstr 为char[10]变量,9为要输入的字符串最大长度(最后会补上'\0'),stdin为从标准终端输入。
- #include <stdio.h>
- int main ( ) {
- char name[20];
- printf("\n 输入任意字符 : ");
- fgets(name, sizeof(name)-1, stdin);//stdin 意思是键盘输入
- fputs(name, stdout); //stdout 输出
- return 0;
- }
- gets和fgets函数
- gets()函数和fgets()函数
- gets函数和fgets函数
- fgets函数和gets函数
- gets函数和fgets函数
- linux中gets()函数和fgets()函数
- gets,gets_s,fgets函数
- fgets()和gets()函数的区别
- fgets()和gets()函数的区别
- gets和fgets函数的区别
- fgets和gets函数的区别
- gets和fgets函数的区别
- 关于gets函数和fgets函数的一些理解
- 字符串读写函数gets() 、puts()、fgets()和fputs()
- 字符串输入gets()、fgets()和字符串输出puts()、fputs()函数
- 字符串处理函数fgets()和gets()
- 字符串输入gets和fgets函数的区别
- 字符串输入函数,scanf,gets,fgets的用法和区别
- 设计模式之前言(一)
- 8.2 定义一个简单的泛型类
- 剑指offer——面试题22:栈的压入和弹出序列
- 8.3 泛型方法
- 0009算法笔记——【动态规划】动态规划与斐波那契数列问题,最短路径问题
- gets函数和fgets函数
- 算法 删数问题
- finally关键字
- MySQL 数据备份与还原
- wex5失败笔记(1)data组件加载数据失败原因
- 全选反选案例
- wordpress插件装太多?检测哪些插件占资源最多
- [LeetCode]Word Ladder
- 新