为什么调大数组就过了,数组大小为6的时候wa了

P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here

访问越界不一定会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


|