| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3246 人关注过本帖, 2 人收藏
标题:缓冲区的讲解(更改)
只看楼主 加入收藏
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
结帖率:98.26%
收藏(2)
已结贴  问题点数:100 回复次数:35 
缓冲区的讲解(更改)
这几天一直在研究缓冲区的问题,可是一直处于迷糊之中,希望高手来讲解一下缓冲区,同时很希望讲解的越详细越好!!谢谢了!!!
因为我在编写程序的时候发现在缓冲区这块遇到了一个问题:

一下可以用一段简短的代码来说明这个问题:
# include <stdio.h>

int
main()
{
    char string[10] ;
    gets( string ) ;
    puts( string ) ;
    return 0;
}
在这个程序里当我输入:1234567890ab的时候会发现程序依然可以把这个字符串输出来,而这个字符串的长度已经超出了我定义的string[10]长度呀,为什么还能够将一个十二个字符输出来呢???

所以想请教一下缓冲区的大小是如何设置的!!!


[ 本帖最后由 我菜119 于 2010-10-14 11:20 编辑 ]
搜索更多相关主题的帖子: 缓冲区 讲解 
2010-10-13 19:56
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:9 
先改变你的习惯性思维,去掉依赖使用fflush(stdin)的坏习惯

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-10-13 20:48
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 2楼 御坂美琴
我需要的是对于缓冲区的讲解,知道御版的厉害!!!!!在如鹏网就听说了!!!很佩服!虽然不知道阁下就读于哪所名校,但看得出御版能够达到现在这种水平曾经付出的努力!也许御版在读大学之前就开始接触电脑编程。再下愚钝,还望御版不吝赐教!!!

愿用余生致力编程
2010-10-13 20:56
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:9 
我来以getchar()函数介绍下输入缓冲:
  函数原型:int getchar(void);
  说明:当程序调用getchar()函数时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar()函数才开始从键盘缓冲区中每次读入一个字符。也就是说,后续的getchar()函数调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才重新等待用户按键。
  不知道您明白了没有,再通俗一点讲,当程序调用getchar()函数时,程序就等着用户按键,并等用户按下回车键返回。期间按下的字符存放在缓冲区,第一个字符作为函数返回值。继续调用getchar()函数,将不再等用户按键,而是返回您刚才输入的第2个字符;继续调用,返回第3个字符,直到缓冲区中的字符读完后,才等待用户按键。
  如果您还没有明白,只能怨我表达能力有限,您可以结合以下实例体会。
  创建一个控制台工程,输入如下代码:
程序代码:
#include <stdio.h>
int main()

 {
    char c;
    c=getchar();
          //第一次调用getchar()函数
          //程序执行时,您可以输入一串字符并按下回车键,按下回车键后该函数才返回
    printf("%c\n",c);
          //显示getchar()函数的返回值
    system("PAUSE");
          //暂停
    while((c=getchar())!='\n')
    {
     printf("%c",c);
    }
    system("PAUSE");
          //暂停
    return 0;
}
  这段小代码很简单,并且在代码内部都有注释。
  getchar()函数的执行就是采用了行缓冲。第一次调用getchar()函数,会让程序使用者(用户)输入一行字符并直至按下回车键 函数才返回。此时用户输入的字符和回车符都存放在行缓冲区。
  再次调用getchar()函数,会逐步输出行缓冲区的内容。
  好了,本人表达能力有限,还是编译运行程序,通过运行结果自己领会吧。
  编译运行程序,会提示您输入字符,您可以交替按下一些字符
  您一直按下去,您就会发现当您按到第4094个字符时,不允许您继续输入字符。这说明行缓冲区的大小是4K。
  此时您按下回车键,返回第一个字符,继续敲一下回车键,将缓冲区的其它的字符全部输出。如图:
图片附件: 游客没有浏览图片的权限,请 登录注册

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-10-13 22:28
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:9 
缓冲区是个很大的概念了,因为我最近也在研究缓冲区算法,感觉长了不少见识,学着多少东西倒不敢说。
今天一看正好有人问这个,分还那么高,赶紧兴冲冲的进来看看~~

不过进来一看,发现我可能想歪了。我想问一下:楼主是不是就是觉得输入缓冲不好处理,所以上来问的这个帖子?
2010-10-13 22:51
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
以下是引用我菜119在2010-10-13 20:56:35的发言:

我需要的是对于缓冲区的讲解,知道御版的厉害!!!!!在如鹏网就听说了!!!很佩服!虽然不知道阁下就读于哪所名校,但看得出御版能够达到现在这种水平曾经付出的努力!也许御版在读大学之前就开始接触电脑编程。再下愚钝,还望御版不吝赐教!!!

你搞错了,我不去如鹏网,本人在读初中

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-10-13 22:58
cacker
该用户已被删除
收藏
得分:9 
提示: 作者被禁止或删除 内容自动屏蔽
2010-10-13 23:00
cacker
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-10-13 23:02
cacker
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-10-13 23:03
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
>>>> 所谓的fflush(stdin);   提交缓冲区  其实就是把_ptr的指针移动回来
越看越不顺眼,干嘛非要用这个呢

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-10-13 23:05
快速回复:缓冲区的讲解(更改)
数据加载中...
 
   



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

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