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

String 更改要扫描的字符串的大小如何影响完全独立于它的输出?,string,String,我的代码在400A问题上给出了错误的答案,而它在我的笔记本电脑上运行正常。有人向我建议,可以通过增加字符串的大小来解决这个问题,这样做之后,代码就被接受了。为了在我的原始代码中找到错误,我在两个代码中放置了print语句以找出哪里出了问题,并在codeforces中提交了两份意见书。在以下提交的内容中,我刚刚将数组w的大小从12更改为13: 如您所见,在前一种情况下,i=0不执行内部循环,但在后一种情况下则执行。为什么会发生这种情况(我知道字符串大小必须保持大于字符串,但这与I=0处的内部循

我的代码在400A问题上给出了错误的答案,而它在我的笔记本电脑上运行正常。有人向我建议,可以通过增加字符串的大小来解决这个问题,这样做之后,代码就被接受了。为了在我的原始代码中找到错误,我在两个代码中放置了print语句以找出哪里出了问题,并在codeforces中提交了两份意见书。在以下提交的内容中,我刚刚将数组
w
的大小从12更改为13:


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

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

下面是可能发生的情况:scanf读取13个字符-12个字符,加上一个空终止字符(\0)。空终止符的ascii值为0

12个字符被正确地抛出到缓冲区中,然后\0字符可能重写了
ar
的第一个值。因此,内部循环变成for(j=0;j<0;j++)


这个故事的寓意是缓冲区溢出是不好的。

谢谢你,你所说的确实发生了。在scanf语句之后,ar[0]变为零。我在scanf语句之后打印了ar[0]的值,结果是0: