Tag: kernighan and ritchie

一个function内的“extern”?

那么,阅读“有点旧”的书(“C编程语言”,第二版,丹尼斯·里奇),我得到了以下几点: 外部变量必须在任何函数之外定义一次; 这为它留出了存储空间。 还必须在每个想要访问它的函数中声明变量 我就像 – 什么?! “还必须在每个想要访问它的函数中声明变量”。 然后,我又一次感到震惊: int max; /* … */ int main() { extern int max; /* … */ } 还有一个 – 什么?! 据我所知(显然,它并不多,而且远远不够), extern只有在某个地方定义一个全局变量并且你想通过另一个文件访问它时才有意义(不是再次定义它)。 所以: 在main或任何其他function中,这个extern int max什么意义? 该标准是否真的说,这是必须的 (我需要声明,对于这个例子,每个函数中的最大值 ,它将使用它吗?) C ++是否相同(这就是我放置C ++标签的原因)? 这是我第一次看到这样的东西。 注意:这与在函数内声明静态变量作为extern的用法有什么不同?

K&R练习1.16 – 线路长度限制

我正在从K&R的“ The C Programming Language ”一书中学习C 语言 。 我正在做本书中指定的练习。 我的运动编号为1.16,但我不明白。 练习1.16: 修改最长行程序的主程序,以便正确打印任意长输入行的长度,并尽可能地打印文本。 我的问题: “……文本尽可能多……” – 字符串长度是否存在一些限制? 也许在标准头文件中有一个变量,其中包含字符串长度的最大允许值? “……任意长输入行的长度……” – 但代码MAXLINE定义为1000.它的大小也是有限的。 我在这里看到了一些解决方案,但在我看来,这不是解决方案的决定,因为前者对行的长度有限制(1000个字符)。 也许我不明白这个任务。 我的理解是我必须删除1000个字符的限制。

我如何完成K&R练习2-4?

我正在学习如何使用k&r书(C语言编程语言)在C语言中编写程序,我对其中一个练习有疑问。 它要求我检测并删除字符串s1中的字符,该字符匹配字符串s2中的任何字符。 所以,比如说s1 =“A”; 并且s2 =“AABAACAADAAE” 我希望它返回“BCDE” 我知道我正走在正确的道路上,我只是不知道如何很好地设计程序,你能不能给我任何额外的提示。 我试着阅读二进制搜索树算法,但觉得这个世俗的任务有点太先进了。 感谢大家! /* An alternate version of squeeze(s1, s2) that deletes each character in * s1 that matches any character in the string s2 * * Angie@odfx.org */ #include #include void squeeze(char s[], char t[]); char string[] = “BAD”; char sstring[] = “ABC”; int main(void) { squeeze(string, […]

`getchar()`在哪里存储用户输入?

我开始阅读“ C编程语言 ”(K&R),我对getchar()函数有疑问。 例如这段代码: #include main() { int c; c = getchar(); putchar(c); printf(“\n”); } 键入toomanychars + CTRL + D (EOF)只打印t 。 我认为这是预期的,因为它是第一个引入的角色。 但接下来是另一段代码: #include main() { int c; while((c = getchar()) != EOF) putchar(c); } 键入toomanychars + CTRL + D (EOF)打印toomanychars 。 我的问题是,如果我只有一个char变量,为什么会这样? 其余的字符存储在哪里? 编辑: 感谢大家的答案,我现在开始明白……只有一个问题: 当给定CTRL + D时,第一个程序退出,而第二个程序打印整个字符串,然后等待更多用户输入。 为什么它等待另一个字符串并且不像第一个那样退出?