永发信息网

C语言 随着读取内容的扩大分配更多的内存

答案:2  悬赏:0  手机版
解决时间 2021-04-07 19:04
  • 提问者网友:寂寞梧桐
  • 2021-04-07 10:55
C语言 随着读取内容的扩大分配更多的内存
最佳答案
  • 五星知识达人网友:神也偏爱
  • 2021-04-07 12:15
首先文件的大小不是指的文件的行数,是指文件所占用的字节数

其次,读取文件的时候不一定非得知道文件的大小,你可以设置一个固定的大小的空间,每次向那个空间里边读入固定的字节数就好了,文件读取需要文件指针去操作,文件都有一个末尾,没记错的话应该是eof 当指针到达这个位置的时候,文件就读取完毕,你再调用文件读取函数也没有什么用

最后,一般像你这种,文件的每一行都是固定的自己大小,那最好采用struct去读取
FILE *file=open("xxxx.txt",w);
struct xxx buffer;
while(file!= eof)
{
read(file,buffer,sizeof(struct xxx));
other operator;

……

}
以上只是思路,具体代码自己实现追问谢谢回复。
就我上面说的那个文件的话,得到了行数怎么再得到分配内存的大小?因为不想浪费内存,所以还是用多少就分配多少比较好吧。。。追答你得到行数有啥用?你要的是整个文件的大小,你每一行既然有3个数据,那么你直接设置

typedef struct
{
double first_num;
double scend_num;
char word[50];
}Node;
然后每一次从文件里边读 Node类型大小的字节数就可以了,你干嘛非得知道行数啊,当你的file指针指向eof的时候,你就把整个文件读完了,这样就可以了——一般读写文件的时候都不会去管行数的,比如你要向文件里边先写几个 Node类型的数据,然后你再读出来,那么你只是调用了函数read,和wirte,但是写的时候,编译器不一定给你每个Node类型占一行,可能一行有两个,有三个,……在读写文件的时候,行 不是一个C标准定义的单位,你只能读写一定大小或者类型的数据,这样才能保证数据在语义上的完整性和合理性追问你这是链表么?
就像我之前说的,我的这个文件是有三列,每行有两个double类型的数字和单词,我是这样想的,分配了内存之后在内存里分别建立三个array存放这个double类型的数字和单词(单词这个array应该是二维数组吧,就假设宽度是50),如果找到有多少行,再乘以8,那不就是需要给每一列double分配的内存大小么?行数乘以1再乘以50就是需要给单词那一列分配的内存大小么?追答你用数组的话,你根本就不知道该分配多大的内存,你需要多大的数组呢?你得把整个的文件从头到尾的跑一便你才能知道到底有几行,可是你的数组得提前分配,那你只能先跑一遍文件发现有多少行,然后你再分配数组,完了再把文件跑一边把数据读出来——你觉得方便吗?
全部回答
  • 1楼网友:旧脸谱
  • 2021-04-07 12:57
文件大小是指文件里面内容所占的字节数。
可以边读取边分配。
用struct比较好,
typedef struct
{
double num1;
double num2;
char str[48];
}st_data;追问谢谢回复,请问怎么边读取边分配?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯