#include
int main(void)
{
char str[100]="88888888888888";
char t[20]="";
gets(t);
puts(str);
puts(t);
return 0;
}
第一行
555555555555555555555555555555555
已放入。
为什么str
是 55555555555
?为什么str
不是88888888888888888
或55555555555588888
?
最佳答案
您覆盖了 t
缓冲区,并到达了 str
缓冲区,其中设置了输入的其余部分和 null 终止符。 puts
仅打印到 null 终止符。
看起来就像这样:
[ t (20) ][str(100) ]
55555555555555555555 5555555555555\0
请注意,虽然 t
被声明为 char[20]
,但当您打印它时,您会得到完整的输入(超过 20),因为 puts
(再次)停在空终止符处。
顺便说一句,这是缓冲区溢出,而不是堆栈溢出,但此代码也可能发生堆栈溢出。
关于c - 数组堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154892/