我有这段代码,它运行得很好,但我不知道为什么:
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)
输出“可以”。这确实是一件很糟糕的事情。