2015-06-10 57 views
0

當我在下面給定的格式提交代碼(的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; 
 
}

然而,當我在它下面是給定一個提交的代碼很容易接受。在這裏,我所做的只是將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; 
 
}

鏈接到這個問題它被用於其中:

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

+0

試'炭檢查[] = 「zyxwvutsrqponmlkjihgfedcba」;'(26沒有用於'沒有空間\ 0')。 – BLUEPIXY

+0

用詳細標誌在本地機器上編譯它並查看輸出結果是什麼 – zallarak

回答

5

check需要27 char s到存儲字符串文字(包括終止空)您分配給它不是26.讀取結尾是UB,但是可能發生的情況是在全局範圍版本中,下一個字節恰好爲0,但是本地l範圍的版本,下一個字節是非零的,導致訪問衝突。

2

不能使用check(在任一版本中)和「字符串」函數。
check沒有終止的NUL字節('\0'),因此您調用了未定義的行爲。

提示:在用字符串文字初始化時忽略數組的大小。

char check[] = "zyxwvutsrqponmlkjihgfedcba"; // compiler determines size automagically 
相關問題