soword科技言
永久公益免费API接口
提供永久免费的API接口,查看更多API接口,如果您有其他免费API资源,请联系我们,造福人类。
提供商务开发:小程序,系统,APP
定制开发,免费评估,免费咨询,价格便宜,售后保障,前往开发服务中心联系开发客服中心
黑客学校第1天:用C堆解决问题

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



2023-03-22 10:04:19

新人小程序+APP定制199元起


发放福利,助力中小企业发展,真正在互联网中受益

点击询问定制

广告服务展示