C语言动态分配内存读txt字符串存入结构体及fscanf参数问题
问题答案
你需要先补全readFile内的内存分配逻辑,再填写fscanf的x、y参数:
- 在while循环外定义下标变量,记录当前存储的结构体位置:
int idx = 0;
- 循环内每次读取数据前,先完成三级内存分配:
// 给当前Art结构体分配空间 vec[idx] = malloc(sizeof(Art)); // 给两个字符串字段各分配80字节空间 vec[idx]->author = malloc(80); vec[idx]->title = malloc(80);
- 此时
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
相关产品推荐
相关产品推荐

