You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UVA482在线评测Runtime Error问题求助

解决UVA482程序的Runtime Error问题

错误原因分析

  • 数组越界访问:你的pos数组定义为int pos[101];,最多仅能存储100个位置值(索引范围0~100),但UVA482的测试用例可能包含超过100个元素的场景。当输入的位置数量超过100时,pos[i]会写入数组边界外的内存区域,破坏其他变量或数据结构,直接触发Runtime Error。
  • 输入缓冲区残留干扰:读取测试用例数量testcases后,缓冲区中残留的换行符可能干扰后续getchar()的判断逻辑,虽不直接导致崩溃,但会加剧越界错误的触发概率。

修正后的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    
    char ch, permute[1001][101], ans[1001][101];
    int i, j, testcases, pos[1001]; // 增大pos数组容量,匹配permute和ans的规模

    scanf("%d", &testcases);
    getchar(); // 清除testcases后的换行符,避免干扰后续输入

    while (testcases--) {
        
        ch = '\0';
        for (i = 0; ch != '\n' && i < 1000; i++) { // 限制i的最大值,防止数组越界
            scanf("%d", &pos[i]);
            ch = getchar();
        }
        
        for (j = 0; j < i; j++) {
            scanf("%s", permute[j]);
        }
          
        for (j = 0; j < i; j++) {
            strcpy(ans[pos[j] - 1], permute[j]);
        }
        for (j = 0; j < i; j++) {
            printf("%s\n", ans[j]);
        }
        if (testcases != 0) {
            printf("\n");
        }
        // 移除不必要的memset调用,下一次循环会覆盖对应位置的数据
    }
    return 0;
}

修正说明

  1. 扩大pos数组至1001个元素,确保能容纳最多1000个位置值,与permute、ans的元素数量匹配,从根源避免越界。
  2. 在读取testcases后添加getchar(),清除缓冲区残留的换行符,保证后续输入读取逻辑的正确性。
  3. 在读取位置的循环中增加i < 1000的判断,进一步防止极端输入导致的数组越界。
  4. 移除不必要的memset调用,减少冗余操作,提升运行效率。

内容的提问来源于stack exchange,提问作者Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:03:37