免费注册 查看新帖 |

Chinaunix

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

求解gets函数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-10 16:48 |只看该作者 |倒序浏览
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main(void) {
    char buffer[5];
    char *flag = NULL;
    while((flag = gets(buffer)) != NULL) {
        printf("%s", flag);
        printf("\tlength=%d\n", strlen(flag));
    }
   
    return 0;
}


为什么输入超过4个字符就有问题?

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2012-07-10 16:57 |只看该作者
char buffer[5];
为什么输入超过4个字符就有问题?

------- 你说呢?

论坛徽章:
0
3 [报告]
发表于 2012-07-10 16:58 |只看该作者
回复 2# bruceteen


    那为什么strlen(flag)=8?
    gets函数在遇到end-of-file或者换行符才会停止读取。按理说,就算超出buffer的边界,后面的东西 也应该能打印出来啊

论坛徽章:
0
4 [报告]
发表于 2012-07-10 17:07 |只看该作者
本帖最后由 hongshaohu 于 2012-07-10 17:08 编辑

a null character is written immediately after the last character read into the array
array 就是上面的buffer
这里的null character指的是什么?NUL?

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
5 [报告]
发表于 2012-07-10 17:12 |只看该作者
回复 3# hongshaohu


    超出的部分往哪儿放?  夜壶满了,如果你再尿就溢出到床上了。

论坛徽章:
0
6 [报告]
发表于 2012-07-10 17:14 |只看该作者
本帖最后由 hongshaohu 于 2012-07-10 17:15 编辑

回复 5# nketc


    大不了数组越界!
    #include <stdio.h>
    char *gets(char *s);
    The gets function reads characters from the input stream pointed to by stdin, into the array pointed to by s, until end-of-file is encountered or a new-line character is read.

    我觉得超出的部分写入到数组后面相邻部分的内存了

论坛徽章:
0
7 [报告]
发表于 2012-07-10 17:18 |只看该作者
那后面那部分内存干什么用的,你知道么?

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
8 [报告]
发表于 2012-07-10 22:55 |只看该作者
回复 6# hongshaohu


    随你便。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
9 [报告]
发表于 2012-07-10 22:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2012-07-11 08:27 |只看该作者
null character 就是'\0'字符。当gets函数从stdin中读到end-of-file或换行符时将停止读取,并且丢掉换行符,在最后添加null character。所以即使缓冲区大小为5,但是gets读入了10个字符,那也应该打印出来这是个字符组成的字符串啊。为什么后面的东西都打印出来不对呢?而且打印的字符串长度最大为8?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP