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

C语言从文件读取二维字符数组时程序停滞的问题求助

问题分析与解决建议

核心问题1:fscanf参数传递错误

fscanf的%c格式符要求传入指向char的指针,但你直接传递了board[r][c](char类型的数值),这会触发未定义行为,是程序停滞的直接原因。

修复代码:

fscanf(fp1, "%c ", &board[r][c]); // 添加取地址符&,传递char变量的地址

核心问题2:二维数组内存分配错误

main中分配行内存时,错误使用了sizeof(char *),但每行需要存储n个char类型元素,正确的分配逻辑应该是:

char **board = (char **)malloc(n * sizeof(char *));
for (int i = 0; i < n; i++)
    board[i] = (char *)malloc(n * sizeof(char)); // 将sizeof(char*)改为sizeof(char)

注:sizeof(char)在C标准中固定为1,也可以直接写n * 1,但用sizeof(char)更符合代码规范。

其他问题与优化点

  • 完善错误处理:当前fopen失败后仅打印提示却继续执行,会导致后续空指针操作,应在报错后直接退出函数:

    if (fp == NULL)
    {
        printf("Could not create file");
        return; // 终止函数,避免非法操作
    }
    

    同理处理fp1的空指针判断。

  • 优化打印格式:打印数组时建议每行结束添加换行,和文件存储格式保持一致,便于查看:

    for(int r = 0; r < n; r++)
    {
        for(int c = 0; c < n; c++)
        {
            printf("%c ", board[r][c]);
        }
        printf("\n"); // 每行结束换行
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:01:18