malloc动态结构数组用法,非常急,还请高手帮忙解决

smallMage 2008-01-03 10:42:21
从文件读取信息,提取每一行的信息 比如 金额,名字,月份
把取得的资料 存到 结构数组中
文件的条数无法确定有多少行,可能有多有少。
怎么解决了 谢谢了
...全文
543 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
chlaws 2008-01-04
  • 打赏
  • 举报
回复
这样分配过多了吧.
并不是所有数据都是.
ryfdizuo 2008-01-04
  • 打赏
  • 举报
回复

直接这样子就可以的:
typedef struct Body
{
int amt;
char name[20];
float month;
};

Body* pBuf;
fseek(pFile,0,SEEK_END);
int len=ftell(pFile)/sizeof Body; //计算记录个数;
pBuf=new pBuf[len]; //根据文件中的记录数申请数组;
rewind(pFile); //重新定向文件指针;
yuannan 2008-01-04
  • 打赏
  • 举报
回复
用链表!
一边读一边MALLOC;
smallMage 2008-01-04
  • 打赏
  • 举报
回复
struct stu
{
int amt;
char name[20];
float month;
}boy[];结构数组动态

while ( !feof( fp ) )
{
动态结构数组怎么使用。
怎么把文本取得的信息存放到上面动态结构数组中
}
把文件取的信息,存放到结构数组中,
然后根据结构数组 里的月份 统计 姓名 汇总金额
HelloDan 2008-01-04
  • 打赏
  • 举报
回复
可以仿照C++里面的vector的做法,先分配够一定数目的数组,如:20行的。并且维护一个数据记录好有多少行,如果超过了那样的行数再重新分配,数组长度数量增加一位,将原来的内容拷到新的数组中,再释放原来的内存……
Holinan 2008-01-04
  • 打赏
  • 举报
回复
这种未知长度的情况,一般都用链表来写比较好
FALLEAFCSHARP 2008-01-04
  • 打赏
  • 举报
回复
用STL吧.内存分配都已经打包好了,指针也可以用Iterator来搞定.

如果你只需要遍历可以用vector,如果需要做查找可以用map.

参考http://www.sgi.com/tech/stl/
tqwillin 2008-01-04
  • 打赏
  • 举报
回复
这个要看你读的文件是txt还是word表格格式,最近我分别写了两个程序,分别解决了这两种情况,不过我的txt文件格式是很规范的,每一行的信息只是一个数据项,可以一行一行的读,分别读到结构体的各数据项中去,如果你的几个数据项在一行,就只能一个字符的读,这样麻烦些。如果是word表格,就要用c#调用word的COM组件去读word文件,因为没有公开API去读word文件。
所以你还是贴出你文件的格式。

我把我的改下,看适不适合你的文件格式(假设你的文件一行只有一个数据项)

#define MAXSIZE 1000 (可以选个更大点的)
#define MAXLINESIZE 100 (大于文件中最长行的字符数)

char Buffer[];
int i;

struct stu
{
char amt[];
char name[];
char month[];
}*boy[MAXSIZE];

while ( !feof( fp ) )
{
boy[i]= (struct stu *)malloc(struct stu);
fgets(Buffer, MAXLINESIZE, fp);
strcpy(boy[i]->amt,Buffer);
fgets(Buffer, MAXLINESIZE, fp);
strcpy(boy[i]->name,Buffer);
fgets(Buffer, MAXLINESIZE, fp);
strcpy(boy[i]->month,Buffer);
i++;
}

ltc_mouse 2008-01-04
  • 打赏
  • 举报
回复
同意13楼,采用动态增长的方法。读文件内容到结构体,一般使用二进制比较方便,fread/fwrite。
关于动态增长,数据结构教材的数组栈一般也会使用这个思想;楼主可以查查~
cceczjxy 2008-01-04
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
struct stu
{
int amt;
char name[20];
float month;
};
int main()
{
struct stu *boy=NULL,*tmp;
int total=0,cur=0;
FILE *file;
char buf[32];
file=fopen("test.txt","r");
if(!file)return -1;

while(fgets(buf,sizeof(buf),file)) //按照你自己的格式把数据读进来
{
if(cur>=total)
{
tmp=realloc(boy,total+100);
if(!tmp)
{
printf("realloc err!\n");
fclose(file);
return;
}
boy=tmp;
}
strcpy((char*)boy+cur*sizeof(struct stu),buf); //你要根据根据文件格式,把数据填入相应的成员内
cur++;
}

fclose(file);

}
smallMage 2008-01-03
  • 打赏
  • 举报
回复
数组怎么写了,可以指教吗,谢谢了
蘑菇摸骨 2008-01-03
  • 打赏
  • 举报
回复
就按照你的结构体写三个函数来分别读取三个成员!
boy[i].amt=amt(fp);类似这样的赋值,可以试试?呵呵!我也是猜的!
哦也!我把自己说糊涂了!
agaric 2008-01-03
  • 打赏
  • 举报
回复
用数组,还是方便。毕竟在pc上嘛。
smallMage 2008-01-03
  • 打赏
  • 举报
回复
struct stu
{
int amt;
char name[20];
float month;
}boy[];结构数组动态

while ( !feof( fp ) )
{
动态结构数组怎么使用。
怎么把文本取得的信息存放到上面动态结构数组中
}
把文件取的信息,存放到结构数组中,
然后根据结构数组 里的月份 统计 姓名 汇总金额
chlaws 2008-01-03
  • 打赏
  • 举报
回复
不明白要干吗.
这个要提取信息.不一定要知道行数吧.
可以fgets 或者是fscanf或者是fread...等等..
smallMage 2008-01-03
  • 打赏
  • 举报
回复
struct stu
{
int amt;
char name[20];
float month;
}boy[];结构数组动态

while ( !feof( fp ) )
{
动态结构数组怎么使用。
怎么把文本取得的信息存放到上面动态结构数组中
}
谢谢了
smallMage 2008-01-03
  • 打赏
  • 举报
回复
我是新手不会用
smallMage 2008-01-03
  • 打赏
  • 举报
回复
我想把信息取出来,然后 根据月份汇总
VxD1 2008-01-03
  • 打赏
  • 举报
回复
原型:void * malloc(size_t);
如果malloc分配成功,返回指向分配空间的指针,如果分配失败,返回NULL指针。
参数size_t为无符号整数,以字节为单位
sheenl 2008-01-03
  • 打赏
  • 举报
回复
链表好了
加载更多回复(2)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧