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

C语言动态分配内存读txt字符串存入结构体及fscanf参数问题

问题答案

你需要先补全readFile内的内存分配逻辑,再填写fscanf的x、y参数:

  1. 在while循环外定义下标变量,记录当前存储的结构体位置:
int idx = 0;
  1. 循环内每次读取数据前,先完成三级内存分配:
// 给当前Art结构体分配空间
vec[idx] = malloc(sizeof(Art));
// 给两个字符串字段各分配80字节空间
vec[idx]->author = malloc(80);
vec[idx]->title = malloc(80);
  1. 此时fscanf语句中的x填vec[idx]->author,y填vec[idx]->title即可。

补充优化建议

  • 建议将fscanf的格式串修改为"%79[^;];%79[^;];%*[^\n]\n",限制单字段最大读入长度为79位(预留1位存储字符串结束符\0),避免缓冲区溢出,同时自动跳过行尾多余字符和换行符
  • 读取单条数据后记得将下标idx++,同时要增加边界判断避免超出vec的最大容量150
  • 原代码存在两处类型错误:
    • readFile函数声明返回值为Art*,但实际返回的是Art**类型的vec,需要将返回值类型修改为Art**
    • main函数打开文件失败时return NULL不符合int返回值要求,应改为return 1;
  • 所有malloc申请的内存后续需要对应free释放,避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:04