今天是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有点令人兴奋。