如何使用malloc函数将文件中的整数值存储到二维数组中
修正实现方案
你现有代码存在两处需要先修正的问题:
- 变量拼写冲突:你定义的列数变量为
colu,但循环逻辑中使用的是col,会直接编译报错 - 数组类型不匹配:目标文件存储的是带小数的浮点数,用
int类型数组会丢失小数部分,需要替换为float或double类型
完整可运行代码
#include <stdio.h> #include <stdlib.h> int main() { int row = 0, col = 3, j, i; FILE *fp; // 打开文件,增加打开失败判断 fp = fopen("file.txt", "r"); if (fp == NULL) { printf("文件打开失败,请检查file.txt是否存在\n"); return 1; } // 读取行数 fscanf(fp, "%d", &row); // 申请float类型数组存储浮点数,增加申请失败判断 float *arr = (float *)malloc(row * col * sizeof(float)); if (arr == NULL) { printf("内存申请失败\n"); fclose(fp); return 1; } for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { // 直接从文件读取浮点数存入对应数组位置 fscanf(fp, "%f", arr + i * col + j); printf("%.1f ", *(arr + i * col + j)); } printf("\n"); } // 收尾操作:关闭文件、释放内存 fclose(fp); free(arr); return 0; }
核心修改说明
- 统一列数变量名为
col,避免拼写错误 - 将数组类型从
int替换为float,适配文件中的浮点数据 - 把原本手动赋值
i+j的逻辑替换为fscanf读取文件内容,直接写入数组对应位置 - 补充了文件打开、内存申请的异常判断,方便排查问题
- 增加了
fclose关闭文件、free释放堆内存的逻辑,避免资源泄漏
内容的提问来源于stack exchange,提问作者NeedHelp
相关产品推荐
相关产品推荐

