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

C语言读取txt文件报错求助:无法找到可执行程序及正确读取方式

解决C语言读取data.txt时的程序执行错误问题

嘿,我看到你的问题了,先帮你揪出代码里的关键错误,这大概率是导致你遇到问题的核心原因:

主要错误点

  • 格式字符串书写错误:你前两个fscanf调用里用了"&d"作为格式字符串,这完全是写错了!正确的整数格式占位符应该是"%d",&是用来获取变量内存地址的,应该放在参数位置(你后面的写法是对的),而不是格式字符串里。这个错误会让fscanf无法正确解析输入内容,直接导致程序运行时异常崩溃,这也是编译环境提示“无法在可执行文件中找到程序”的原因(程序异常终止后,环境无法正常识别执行状态)。
  • 缺少文件打开失败的判断:如果fopen找不到data.txt(比如文件不在程序运行的当前工作目录),会返回NULL指针,后续对NULL指针的操作会直接触发程序崩溃,所以必须添加文件打开成功的判断逻辑。

修正后的代码

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

// 假设Array结构体定义如下(你需要确保这个定义存在于代码中)
typedef struct {
    int n1;
    int n2;
    int *p1;
    int *p2;
} Array;

Array* input() {
    int x, y;
    int i;
    Array *p;
    FILE *f = fopen("data.txt", "r");
    
    // 先判断文件是否成功打开
    if (f == NULL) {
        printf("无法打开data.txt文件!请检查文件路径是否正确\n");
        return NULL;
    }
    
    p = (Array*) malloc(sizeof(Array));
    // 修正格式字符串为%d
    fscanf(f, "%d", &x);
    fscanf(f, "%d", &y);
    p->n1 = x;
    p->n2 = y;
    
    p->p1 = (int*) malloc(sizeof(int) * p->n1);
    p->p2 = (int*) malloc(sizeof(int) * p->n2);
    
    // 读取第一个数组的元素
    for(i=0; i < p->n1; i++) {
        fscanf(f, "%d", &p->p1[i]);
    }
    // 读取第二个数组的元素
    for(i=0; i < p->n2; i++) {
        fscanf(f, "%d", &p->p2[i]);
    }
    
    fclose(f);
    return p;
}

额外注意事项

  1. data.txt的格式要求:文件内容需要符合读取逻辑,示例格式如下:
    3 4
    1 2 3
    5 6 7 8
    
    第一行是两个整数(对应n1和n2),接着是n1个整数,然后是n2个整数,整数之间用空格、换行符分隔都可以,fscanf会自动跳过空白字符。
  2. 内存释放:记得在使用完input()返回的Array指针后,要手动释放p1、p2以及Array本身的内存,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:36:42