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

从文本文件读取数字存入矩阵时遇stream!=nullptr空指针问题求助

解决文件读取矩阵时的空指针错误

我来帮你排查下问题,你遇到的stream!=nullptr错误根源很明确,咱们一步步拆解:

问题分析

  1. 文件打开失败后未终止程序
    当fopen返回NULL(比如文件找不到、权限不够),你只打印了错误信息,但程序还是继续执行后面的for循环。这时候用NULL的文件指针去调用fscanf_s,必然触发空指针异常——就像你要打开一扇不存在的门,还硬要往里走一样。

  2. printf用法错误
    你写的printf("%d", &MazeMatrix);是在打印数组的首地址,而不是数组里存储的数字,这根本没法验证读取结果。

  3. 文件资源未释放
    就算文件打开成功,你也没调用fclose关闭文件,会造成资源泄漏。

修正后的代码

#include <stdio.h>
#include <stdlib.h> // 用于exit函数

int main() {
    int MazeMatrix[64];
    int i;
    FILE *mazefile;
    
    // 打开文件
    mazefile = fopen("m5.txt","r");
    if (mazefile == NULL) {
        printf("无法打开文件!请检查文件路径或权限\n");
        exit(EXIT_FAILURE); // 直接终止程序,避免后续错误操作
    }
    
    // 读取32个整数到数组,同时检查读取是否成功
    for (i = 0; i < 32; i++) {
        if (fscanf_s(mazefile, "%d", &MazeMatrix[i]) != 1) {
            printf("读取第%d个数字失败!可能文件内容不足\n", i+1);
            fclose(mazefile); // 出错时也要记得关闭文件
            exit(EXIT_FAILURE);
        }
    }
    
    // 打印读取结果,验证正确性
    printf("成功读取的矩阵内容:\n");
    for (i = 0; i < 32; i++) {
        printf("%d ", MazeMatrix[i]);
        if ((i+1) % 8 == 0) { // 每8个数字换行,排版更清晰
            printf("\n");
        }
    }
    
    fclose(mazefile); // 用完文件必须关闭
    return 0;
}

额外注意事项

  • 确保m5.txt和你的可执行文件在同一目录,或者使用绝对路径(Windows下写"C:\\你的路径\\m5.txt",Linux/macOS下写"/home/你的路径/m5.txt")。
  • 如果你不是在Visual Studio环境下编译,建议用标准C的fscanf代替fscanf_s——fscanf_s是微软的安全扩展,移植性很差。

内容的提问来源于stack exchange,提问作者M.Stones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:43:13