为什么在线法官不接受呢?

Apu*_*Jha 0 c

当我以下面给出的格式提交代码时,在线法官(Codechef)不接受它:

#include<stdio.h>

int main()
    {
          int length,test;
          char check[26]="zyxwvutsrqponmlkjihgfedcba";
          scanf("%d",&test);
          while(test--){
          scanf("%d",&length);
          if(length%25 != 0)
          printf("%s",check+25-(length%25));
          length/=25;
          while(length--)
                       {
                            printf("%s",check);
                       }
          printf("\n");
          }
          return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我提交下面给出的代码时,它很容易被接受.在这里,我所做的只是将char数组从局部变为全局.任何人都可以理解它的原因.

#include<stdio.h>
char check[26]="zyxwvutsrqponmlkjihgfedcba";
int main()
    {
          int length,test;
          
          scanf("%d",&test);
          while(test--){
          scanf("%d",&length);
          if(length%25 != 0)
          printf("%s",check+25-(length%25));
          length/=25;
          while(length--)
                       {
                            printf("%s",check);
                       }
          printf("\n");
          }
          return 0;
}
Run Code Online (Sandbox Code Playgroud)

链接到使用它的问题:

http://www.codechef.com/problems/DECSTR

Moo*_*oys 5

check需要27 char秒来存储你分配给它的字符串文字(包括终止null),而不是26页.读取结尾是UB,但可能发生的是全局范围版本,下一个字节恰好是0,但是本地范围版本,下一个字节非零,导致访问冲突.