小编use*_*305的帖子

超出 C 中的数组界限——为什么这不会崩溃?

我有这段代码,它运行得很好,但我不知道为什么:

int main(){
   int len = 10;
   char arr[len];
   arr[150] = 'x';
}
Run Code Online (Sandbox Code Playgroud)

说真的,尝试一下!它有效(至少在我的机器上)!但是,如果我尝试更改索引太大(例如索引 20,000)的元素,它就不起作用。所以编译器显然不够聪明,无法忽略这一行。

那么这怎么可能呢?


答案:我可以用它来写入堆栈上其他变量消耗的内存,如下所示:

#include <stdio.h>
main(){
   char b[4] = "man";
   char a[10];
   a[10] = 'c';
   puts(b);
}
Run Code Online (Sandbox Code Playgroud)

输出“可以”。这确实是一件很糟糕的事情。

c arrays

5
推荐指数
1
解决办法
3931
查看次数

标签 统计

arrays ×1

c ×1