PAT平臺,「運行時錯誤」定位

1 PAT平臺,定位到「 運行時錯誤」方法

  咱們用桌面版的IDE開發的代碼,編譯經過,且在本地運行正常,提交代碼到PAT平臺時,有時會報「運行時錯誤」。怎樣定位到錯誤處呢?下面提供一個可行的方法,本方法參考文獻1。
  在開始以前,科普下#if 0 #endif,它至關於註釋的做用,以下所示。具體參考文獻2。git

#if 0 
    // 夾在中間的代碼塊,是被註釋掉的代碼塊
#endif

  方法:
  1 用#if 0 #endif,從main函數末尾開始,註釋掉最末的代碼塊n。點擊提交。進行步驟2。
  2 查看提交結果,是否由「運行時錯誤」,轉變成"答案錯誤"或者"答案正確"。
  若是是,說明出現「運行時錯誤」的地方,在#if 0下面緊挨着的代碼塊處,進入步驟4。
  若是否,進行步驟3。
  3 將#if 0前移到當前#if 0所在代碼塊的前一個代碼塊位置,點擊提交,返回步驟2。(例:第一次進行步驟3時,將#if 0剪切到第n-1個代碼塊以前,第二次進行3時,將#if 0剪切到第n-2個代碼塊以前......)。
  4 定位到出錯代碼塊處後,能夠更細粒度的在出錯代碼塊繼續定位行。使用#if 0 #endif註釋掉出錯誤代碼塊的最末一句。點擊提交,查看提交結果,是否由「運行時錯誤」,轉變成"答案錯誤"或者"答案正確"。
  若是是的話,找到了出錯代碼行,結束查找過程。
  若是否的話,把#if 0前移一行或若干行,點擊提交,觀察提交結果。逐行的,從後向前註釋代碼塊n中的代碼行,直到找到出錯的代碼所在行,結束查找過程。github

#include <stdio.h>

int main(int argc, char **argv) {    
    // 代碼塊1
    {
        // ...       
    }
    
    // 代碼塊2
    {
        // ...       
    }
    
    ...
    // 所設它是出錯代碼塊i
    {
        // code line1;        
        // code line2;
        
        ...
        
        // code linej-1
// 把"#if 0"前移一行或若干行,點擊提交,觀察提交結果,直到定位到出錯的代碼行。
#if 0        
        // code linej;
#endif 
    }
    ...
    
    // 代碼塊n-1
    {
        // ...       
    }    

// 逐步的移動"#if 0"到前一個代碼塊,直到定位到出錯的代碼塊。
#if 0        
    // 代碼塊n
    {
        // ...       
    }    
#endif    
}

2PAT「 運行時錯誤」 的一個例子。

  開發語言:C。
  出錯描述:需求是將字符串複製到字符數組,使用的是strcpy(字符數組1,字符串2)函數。結果出現了上述錯誤。
  解決方法:使用memcpy函數代替strcpy。參考文獻3。數組

3 參考文獻:

[1] https://mergebubble.github.io... (PAT 1016 | 黑小豬與豬小白)
[2] https://blog.csdn.net/weibo12... (C++中#if 0 ... #endif的用法 - 魏波 - CSDN博客)
[3] https://blog.csdn.net/u011391... (C語言中的複製函數(strcpy和memcpy) - Dufre - CSDN博客)函數

相關文章
相關標籤/搜索