当前位置: 代码迷 >> C语言 >> 关于printf函数.大家请看看.............
  详细解决方案

关于printf函数.大家请看看.............

热度:269   发布时间:2008-05-17 11:10:13.0
按照我的理解。应该是第一次调用printf,io申请缓冲区冲掉了长度100的字符串"I Love you"。但是还是有点不明白。如果是只分配一次的缓冲区,理论上应该不会分配到栈上面去。而是在堆上面分配。那样的话,为什么还会冲掉缓冲区呢?按照燕子的程序。如果不分配缓冲区的话,printf占用90字节的堆栈,如果分配的话,占用三百多字节。看样子是在栈上面分配的,如果那样,为什么还会有”第一次调用才分配”这样的逻辑呢?
想不明白……

有没有介绍标准IO内部实现的资料呢?发现自己对于缓冲区,及内部实现,是一点都不懂……
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]Q1007665007[/un] 在 2008-5-17 05:28 的发言:[/bo]

我心态要是平和我就不会这么晚还不休息
刚刚又更新了高亮软件,容错力越来越强,现在连头文件名折行也能完美解决了
不过我现在已经不想发出来了,学到的东西不分享也就罢了
总觉得有的时候,人的自私是被某些小人逼的 ...


嘴巴长在别人身上,别人如何评论不必太在意。
人是为自己而活,不是为别人。
别人的评论,觉得有道理就接受,没道理就忽略。
木秀于林,风必摧之。一个人太引人注目必然同时引来赞誉和批评打击,真正自信的人应该夸不骄,批不倒。
在超越众人的时候,尤其要低调处事,以谦逊的态度对待人和事。

=====================================================================================================
回楼上:
标准IO缓冲是在堆中声请的,这个缓冲区和堆栈没有关系。
我们没人说这些空间是缓冲区占用了,我在26楼只是说“第一次调用printf对后面再次调用有影响”,意思是先后两次调用同一io函数时该函数的行为不一致,所以才会有破坏堆栈数据程度不同的差别,也就造成了一种情况下保留I love you!另一种把这段字符全部破坏的区别。
这种区别的原因是IO缓冲区,但不是说是缓冲区直接破坏,是间接导致的。
本帖最近评分记录
  • mqh21364 +4 我就4个,都给你! 2008-5-17 16:23
  • StarWing83 +5 要向你学习。NND,非要三次才能写完…… ... 2008-5-17 15:30
  • StarWing83 +5 对燕子的评论,很欣赏,你是一个稳沉的人。 ... 2008-5-17 15:28
  • StarWing83 +5 谢谢你解答了我的疑惑。是我疏忽了。 ... 2008-5-17 15:28
  • liyanhong +2 2008-5-17 11:49
  • liyanhong +2 2008-5-17 11:49
  • liyanhong +2 听着真难过 2008-5-17 11:36

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-05-17 03:32:25
Knocker

等 级:贵宾
威 望:40
帖 子:10377
专家分:280
注 册:2004-6-1
  得分:0 
C版已经好久没见过这样真正的讨论贴了
----------------解决方案--------------------------------------------------------
  相关解决方案