如何更改要扫描的字符串的大小会完全独立于输出?

时间:2014-03-06 07:34:40

标签: string

我的代码在http://codeforces.com上的问题400A上给出了错误的答案,而它在我的笔记本电脑上工作正常。有人向我建议可以通过增加字符串的大小来解决问题,在这之后,代码被接受了。为了找到原始代码中的错误,我在两个代码中放置了print语句,以找出出错的地方并在代码强制中提交了两个提交。在以下提交中,我只是将数组w的大小从12更改为13: http://codeforces.com/contest/400/submission/5948686

http://codeforces.com/contest/400/submission/5948717

正如您所看到的,在前一种情况下,内部循环不会为i=0执行,但在后一种情况下则执行。为什么会发生这种情况(我知道字符串大小必须保持大于字符串,但这与i=0内部循环的功能有什么关系?)

1 个答案:

答案 0 :(得分:1)

这是我最好的猜测,但这取决于所使用的编译器,内存方式的布局, - 可能无法确切知道。其他人可能有更好的猜测。

所以这就是可能发生的事情:scanf读取13个字符 - 12个字符,加上一个空终止字符(\ 0)。 null终止符的ascii值为0

正确地将12个字符放入缓冲区,然后\ 0字符可能覆盖ar的第一个值。因此内循环变为(j = 0; j <0; j ++)

故事的道德是缓冲区溢出是坏的。