咱們用桌面版的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 }
開發語言:C。
出錯描述:需求是將字符串複製到字符數組,使用的是strcpy(字符數組1,字符串2)函數。結果出現了上述錯誤。
解決方法:使用memcpy函數代替strcpy。參考文獻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博客)函數