茱莉亚·伊万斯

黑客学校第一天:用C语言处理堆栈

今天是黑客学校那里有很多了不起的人,而且很有趣,而且有点压倒性。

我配对达芙妮在名为短跑马上。她很棒,教了我很多关于C的东西。

当试图在shell中标记字符串时,我们遇到了一个超不直观的bug。这里是主旨其中:

包括:
          
           void set_string(char***string){char*strs[]={"香蕉};*string=strs;}int main() {char**字符串;set_string(&string);Primtf(“第一次打印:“%s”n”,弦乐〔0〕;ch*s=美国广播公司“;Primtf(“第二次打印:“%s”n”,弦乐〔0〕;}
          

{lang='ruby'}

因此,这看起来像要打印的正常代码香蕉两次。但实际情况是:

[电子邮件保护]~/w/h/gists>gcc write-to-stack.c&./a.out.print: 'banana'secondprint: 'UH'WAVAUE1TE1H'H'。

{:lang='text'}

据我所知,这是因为这条线:

char*strs[]={"香蕉};;

堆栈而不是在.所以指针指向堆栈,当进行诸如设置avariable之类的操作时,它变得很奇怪。我们花了一段时间才弄清楚发生了什么事。哎呀!!

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