<分区>
遇到这种情况时,我正在对某个主题进行一些研究。 假设以下 C 代码:
#include <stdio.h>
int main() {
char name[1];
scanf("%s",name);
printf("Hi %s",name);
return 0;
}
我使用 -fno-stack-protector
进行了编译,并使用长度超过 1 的输入对其进行了测试,例如 John
,令我惊讶的是,它有效!
当输入长于 1 时,它不应该抛出段错误吗?
最终它打破了 Alexander
作为输入 (9) 但它适用于小于 9 的任何东西。
为什么它使用比名称数组长度更长的输入?
P.S:我正在使用 Ubuntu(64 位)、gcc 版本 4.8.4(Ubuntu 4.8.4-2ubuntu1~14.04)和 CLion 作为 IDE。