免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4776 | 回复: 21
打印 上一主题 下一主题

[C] 最近都在讨论gets、fgets的... ... 拿老祖宗的书来看... ... [复制链接]

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-10 13:40 |只看该作者 |倒序浏览
本帖最后由 Ager 于 2012-10-11 07:57 编辑

@mirnshi
@starwing83
@pmerofc

最近都在讨论gets、fgets的……拿老祖宗的书来看……

由《CMate》里所推的月薪10,000元程序员的代码,引发了C版朋友们的热烈讨论。讨论的焦点,当然就是关于gets、fgets、溢出等等话题。

我就寻思了:这gets/fgets的问题,难道是最近或最近几年或最近十几年才有的吗?

手头材料有限,但是UNIX和C的老祖宗们如B. W. Kernighan和R. Pike的《The UNIX Programming Environment》我还是有一本。

在这本书的第183页,老祖宗们写了这样的代码和说明:
  1. print(fp, pagesize)        /* print fp in pagesize chunk */
  2.         FILE *fp;
  3.         int pagesize;
  4. {
  5.         static int lines = 0;        /* number of lines so far */
  6.         char buf[BUFSIZ];

  7.         while (fgets(buf, sizeof buf, fp) != NULL)
  8.                 if (++lines < pagesize)
  9.                         fputs(buf, stdout);
  10.                 else{
  11.                         buf[strlen(buf)-1] = '\0';
  12.                         fputs(buf, stdout);
  13.                         fflush(stdout);
  14.                         ttyin();
  15.                         lines = 0;
  16.                 }
  17. }
复制代码
(你看看,人家写的代码,多优美……)

We used BUFSIZ, which is defined in <stdio.h>, as the size of the input buffer. fgets(buf,size,fp) fetches the next line of input from fp, up to and including a newline, into buf, and adds a terminating \0; at most size-1 characters are copied. It returns NULL at end of file. (fgets could be better designed: it returns buf instead of a character count; furthermore it provides no warning if the input line was too long. No characters are lost, but you have to look at buf to see what really happened.)


至于gets,翻遍全书(其实看书末的索引就可以),根本就没有这么个东东

这是一本新书或比较新的书吗?不!这本书非常老旧!1984年出版的!将近三十年了!

2012年了,小乔书里的gets,到底是怎么流传至此的 …… ?






论坛徽章:
0
2 [报告]
发表于 2012-10-10 13:57 |只看该作者
这个厉害了,英文版的哦。。

论坛徽章:
1
2015亚冠之卡尔希纳萨夫
日期:2015-07-14 12:20:38
3 [报告]
发表于 2012-10-10 14:03 |只看该作者
楼主是学现象学的啊

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
4 [报告]
发表于 2012-10-10 14:04 |只看该作者
本帖最后由 Ager 于 2012-10-10 14:07 编辑
huxk_cu 发表于 2012-10-10 14:03
楼主是学现象学的啊


是唉:)

大虾,你是搞哲学的吧?


论坛徽章:
1
2015亚冠之卡尔希纳萨夫
日期:2015-07-14 12:20:38
5 [报告]
发表于 2012-10-10 14:06 |只看该作者
回复 4# Ager


    胡塞尔?

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
6 [报告]
发表于 2012-10-10 14:08 |只看该作者
huxk_cu 发表于 2012-10-10 14:06
回复 4# Ager

胡塞尔?


大虾你指我的论坛头像?

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
7 [报告]
发表于 2012-10-10 15:31 |只看该作者
很惭愧,没系统看过C的教材。gets这个函数几乎就没用过(印象里没有),都是用scanf的。小文件诸如配置文件,喜欢用sscanf

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
8 [报告]
发表于 2012-10-10 15:35 |只看该作者
BUFSIZE, which is defined in <stdio.h>

也没用过这个,特意grep了一下,没找到。

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
9 [报告]
发表于 2012-10-10 15:40 |只看该作者
mirnshi 发表于 2012-10-10 15:35
也没用过这个,特意grep了一下,没找到。


我的错,应该是BUFSIZ。

论坛徽章:
3
摩羯座
日期:2013-11-12 20:06:19午马
日期:2013-11-27 16:35:55双鱼座
日期:2014-04-04 19:02:30
10 [报告]
发表于 2012-10-10 16:04 |只看该作者
回复 1# Ager

是不是写错了,   FILE *fp , 好古老的C语言啊。 这是C语言的什么标准来着?


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP