咱们用桌面版的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博客)函数