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