所以我在 StackOverflow 上失去了我的周末,并在热门网络问题中看到了这个挑战。
背景
你好高尔夫球手!我想学习所有的编程语言!但是我的注意力有点短……复制所有 Hello World 的例子很无聊……但我喜欢火!^w^
挑战
所以这是计划!我希望你们都编写最小的代码来编译,打印 Goodbye Cruel World!,然后崩溃。或者,作为额外的扭曲挑战,打印 Hello World!并与再见残酷世界崩溃!
作为一个愿意完全理解 C 语言的学生,当我偶然发现 C对这个挑战的答案时,我一直很困惑:
main(){puts(puts("Goodbye Cruel World!"));}
打印字符串,然后尝试将返回值用作指向要打印的另一个字符串的指针,这会导致分段错误。
感谢puts()
文档,我发现puts()
成功返回非负值。因此,如果我理解正确,这相当于:
puts(2);
2
“指向要打印的另一个字符串的指针”如何?
后来,对这个相同的答案进行了改进:
main(i){i=puts("Goodbye Cruel World!")/0;}
而这一次我完全迷失了。soi
作为来自 main 的参数,用于存储 的返回值puts()
。好的。但是\0
呢?为什么使用NUL-TERMINATOR
那里的字符?
如果你能让我轻松一点,我会很有趣地理解这一点。另外,我认为如果改写问题的标题可能会更准确,但我无法用语言表达我的误解。