访问越界不一定会RE,这时候访问到了别的地方自然就WA掉了
by NaCly_Fish @ 2019-01-31 21:52:11
字符串的末尾会储存一个空字符,占一个位置
如果你读入6个字符,它会储存7个字符
by StarLbright40 @ 2019-01-31 21:56:05
问题在于 strlen(a)
看这:
```cpp
char a[6], b[6];
gets(a);
gets(b);
```
输入6个字符,实际上是输入7个字符(第七个为 '\0' )
strlen(a) 是这样计算的:
从 a[0] 开始寻找,直至找到 '\0' ,统计在此过程中“路过”的字符数(不包括 '\0' )
如果 gets(a) 输入6个字符,那么 a[7] 的值为 '\0'
然后 gets(b)
此时 a[7] 的'\0' 被 b[0] 覆盖(a,b数组在内存中相邻)
strlen(a) 的返回值就比预期大
爆炸分析完毕
by zwuis @ 2019-01-31 22:09:02
@[sunzhen](/space/show?uid=179811)
by zwuis @ 2019-01-31 22:19:39