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; }
额外注意事项
- data.txt的格式要求:文件内容需要符合读取逻辑,示例格式如下:
第一行是两个整数(对应n1和n2),接着是n1个整数,然后是n2个整数,整数之间用空格、换行符分隔都可以,3 4 1 2 3 5 6 7 8fscanf会自动跳过空白字符。 - 内存释放:记得在使用完
input()返回的Array指针后,要手动释放p1、p2以及Array本身的内存,避免内存泄漏。
内容的提问来源于stack exchange,提问作者c00ler
相关产品推荐
相关产品推荐

