| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9892 人关注过本帖
标题:求大神解答下 gets()和 fgets()遇到换行符有什么区别
只看楼主 加入收藏
菜鸟132
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-9-10
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
求大神解答下 gets()和 fgets()遇到换行符有什么区别
gets从stdin中读取字符到数组中,当输入遇见换行符终止时,gets丢弃这个字符,不会把它存在数字里,那么缓冲区里面还有没有换行符呢
搜索更多相关主题的帖子: 换行符 缓冲区 
2014-09-11 20:56
魑魅魍魉!
Rank: 3Rank: 3
来 自:亲爱MM肚子里!
等 级:论坛游侠
威 望:1
帖 子:61
专家分:149
注 册:2014-5-3
收藏
得分:7 
fgets()函数用于从文件流中读取一行或指定个数的字符,送到缓冲区。当遇到换行符时,fgets()函数就会停止,返回读到的数据。
gets函数会将行末的回车符当作一个空行读入。
2014-09-11 21:16
菜鸟132
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-9-10
收藏
得分:0 
回复 2 楼 魑魅魍魉!
谢谢你的解答,那么缓冲区内是不是也没有回车符了
2014-09-11 21:26
Coincedence4
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:52
专家分:151
注 册:2014-9-4
收藏
得分:7 
fgets从指定的文件读入,遇到换行或EOF就停止,之后加上'\0'。gets是标准读入,其他没啥区别。
2014-09-11 21:58
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:7 
别提什么『缓冲区』,这不是C/C++的概念

gets的原型是 char *gets( char *buffer ); 它没有指定buffer的长度,因此程序员必须保证buffer足够装得下需要读取的行。
换句话说,当你使用gets时,就等于向编译器保证了buffer一定足够,因此buffer中是不需要容纳'\n'的
现实中,程序员无法保证buffer一定足够容纳下需要读取的行(甚至包括故意的数组溢出攻击),因此gets这个函数已经被C/C++语言废弃了

fgets的原型是 char *fgets( char *buffer, int n, FILE *stream ); 它指定了buffer长度,但程序员如何区分是读完整了一行而结束,还是读满了buffer而结束?因此buffer中可能会包含'\n',因读满buffer而结束时buffer中无'\n',因读完了行而结束时buffer中带'\n',以作区分。最后一行例外,因为最后一行自有feof来判断,若最后一行无回车,是不会故意添加'\n'的。
2014-09-12 16:10
快速回复:求大神解答下 gets()和 fgets()遇到换行符有什么区别
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024366 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved