- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 Brian & Dennis 的 C 语言经典著作《The C Programming Language》的第 1.9 章中,有一段代码是关于函数“getline”的,该函数用于将输入文本的下一行复制到一个char 类型字符串并检查溢出。我引用下面的代码:
int getline(char line[], int maxline);
int getline(char s[], int limit)
{
int c,i;
for (i=0; i<limit-1 && (c=getchar())!=EOF && c!='\n'; ++i) /* ** */
s[i]=c;
if (c == '\n') {
s[i]=c;
++i;
}
s[i] = '\0';
return i;
}
问题来了:参数'limit'是行的最大长度,所以数组s[]只能包含从s[0]到s[limit-1]的元素集合。如果变量 c 到 getchar() 的最后一个字符是 '\n' 并且这个字符的索引是 limit-1,那么 'for' 循环中的判断部分会因为 'i==limit-1' 而失败但不是'c!='\n'(按照从左到右的顺序)。接下来,if子句会起作用,因为'c=='\n'',所以s[limit-1]=c,那么++i会将i的值设置为limit。 s[i]='\0' 会溢出,因为 s[limit] 超出了字符串的限制。我的分析对不对?感谢您提供任何有用的答案。
最佳答案
你的分析是错误的。如果 i == limit-1
,由于短路评估,循环会在未读入 c
的情况下中断。因此,您永远不会输入 if (c == '\n')
。 i
保持 limit-1
并且没有溢出。
概念上,你可以这样想循环条件:“如果i
低于limit-1
,则读取一个字符,如果不是EOF或换行符,进入循环体。”因此,如果 i
是 limit-1
,您永远不会阅读。
关于c - 经典书籍 "The C Programming Language"中1.9章的示例代码是否有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25209442/
揭开网络爬虫的神秘面纱 嗨,亲爱的读者朋友们,今天我想和大家分享一下我对Python3网络爬虫书籍的一些心得体会。网络爬虫就像是一位善于探险的探险家,穿越数字世界的丛林,捕捉着信息的脉搏。 历经荆棘,
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是 JavaScipt 新手,我无法理解下面的代码 maskat.lang.Class.declare("maskat.key.KeyEventManager", { _static: {
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在开发一个应用程序,允许用户用户查看他们有权访问的收件箱的内容。除了 之外,我很难找到一种搜索全局地址列表的方法 AddressEntries entries = global.AddressEn
人们常常问我有什么C++和编程的书籍推荐,今天就为大家分享了几本 第一个注意项:如果你打算学习C++,请务必学习最新版的C++ 2011。这个版本的C++移除了许多由C++强大带来的一些痛苦之处。
我需要为一本书创建一个索引。虽然乍一看这项任务很简单——按第一个字母对单词进行分组,然后对它们进行排序——但这个显而易见的解决方案仅适用于美国语言。然而,真正的词要复杂得多。参见 http://en.
我是一名开发人员,将我们的 IIS 服务器的管理职责交给了他。在设置网站、虚拟目录等方面,我对 IIS 相当熟悉,但我想如果我要完全成为服务器的管理员,我最好尽快跟上。 有什么关于 IIS 书籍的推荐
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
如果我在网站上看到很酷的效果,我会查看 jquery 的源代码,通常我可以理解它,但是,我正在查看 http://www.mckinsey.com 的 slider 。并查看了用于进行页面幻灯片的 j
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
方法(对象的函数)可以使用“this”关键字来引用对象的变量。 函数的属性可以引用函数变量吗? 例如:- function foo() { var x=5; }
我有以下型号。 Book has Articles (Article has foreign key to Book) Article has Images (Article has upto #ma
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
我是一名优秀的程序员,十分优秀!