今天是Hacker学校的第一天。那里有很多很棒的开发者,虽然说很有趣但是有点压倒性的。

在C中的外壳上配对,该外壳 现在称为_dash。

尝试在shell中标记字符串时,我们遇到了一个超级直观的错误。这是要点:

#include <stdio.h>void set_strings(char*** strings) {
char* strs[] = {"banana"};
*strings = strs;}int main() {
char** strings;
set_strings(&strings);
printf("First print: '%s'\n", strings[0]);
char* s = "abc";
printf("Second print: '%s'\n", strings[0]);}

{:lang ='ruby'}

因此,这看起来像是将两次打印“banana”的普通代码。但实际上是这样的:

bork@kiwi ~/w/h/gists> gcc write-to-stack.c&& ./a.outFirst print: 'banana'Second print: 'UH�WAVAUE1TE1H�H�'

{:lang ='text'}

据我了解,这是因为以下行:

char* strs[] = {“banana”};

在堆栈而不是在堆上分配。因此,指针指向 strings堆栈,当您执行诸如设置变量之类的操作时,它变得很奇怪。我们花了一段时间才弄清楚发生了什么。好极了!

取得(据我所知)在Python中完全不可能的bug有点令人兴奋。