C语言文件读取的时候,如何设置数组长度
2018-02-28 21:15
459 查看
当我们使用c语言读取文件的时候,你完全可以使用一个大数组来存放读取的内容,但是这样是不是就造成了很多浪费呢???如果文件内容很大的话,你更不可能使用一个大数组来进行存放了。
最好的办法是使用动态内存分配,当文件内容很大的时候,你完全可以分多次执行。
ftell(fp); 获取到当前文件指针指向的位置
fseek(fp,0L,SEEK_END); 设置当前文件的指针位置
在linux系统下还有另一种方法, 就是使用结构体,但是如果使用结构体,这样效率更高
最好的办法是使用动态内存分配,当文件内容很大的时候,你完全可以分多次执行。
首先获取到文件的大小确定数组长度
在c语言中不能像其他语言那样,通过size属性能够直接获取到文件的大小,那么我们如何获取到文件的大小能,并且需要用到两种函数:ftell(fp); 获取到当前文件指针指向的位置
fseek(fp,0L,SEEK_END); 设置当前文件的指针位置
fp当前文件指针指向的位置 0L表示偏移量 这里3个可选参数 SEEK_SET 表示文件首位置 也可以用0代替 SEEK_CUR 表示文件指针当前位置 也可以用1代替 SEEK_END 表示文件末位置 也可以用2代替
int filesize(FILE * fp){ int curpos,length; if(fp == NULL){ return 0; } curpos = ftell(fp);//记录当前文件指针的位置 fseek(fp,0L,SEEK_END);//将当前指针移动到文件末 length = ftell(fp);//当前指针的位置即为文件大小 fseek(fp,curpos,SEEK_SET);//回到之前指针的位置 return length; }
在linux系统下还有另一种方法, 就是使用结构体,但是如果使用结构体,这样效率更高
动态分配内存,存放字符串
获取到文件大小的主要目的还是为了确定分配多大的内存int getStrOnFile(char ** str,char * dir,char * type){ FILE * file; int index = 0; if((file 4000 = fopen(dir,type)) == NULL){ printf("文件打开失败\n"); return 0; } (*str) = (char *)malloc(filesize(file) + 1); while(((*str)[index++] = fgetc(file)) != EOF); (*str)[index] = '\0'; fclose(file); return 1; }
main函数
int main(){ char * str = NULL; getStrOnFile(&str,"d://file.txt","r"); printf("%s",str); free(str); }
相关文章推荐
- C语言设置文件长度的方法,可以在WIndows和Linux上用
- C语言应用于LR中-如何得到数组长度
- 如何在winhex里面将一个文件转成C语言数组存储
- 【原创】C语言中如何用长度变量定义数组
- C语言读取文件并存入到一个数组
- [VB.NET]如何定位读取二进制文件,每次只读取指定长度?
- 如何把数组设置为空数组,即长度为0
- C语言把内存的文件保存到硬盘时如何把文件名由用户通过屏幕自己设置,并且保存到指定的路径
- prim算法改编,C语言,可将顶点保存到数组,并可读取文件
- C语言如何从文件中读取数据
- c语言实现快速排序算法(直接给出数组,从文件中读取的方法后续会贴出来)
- C语言中如何求任意一个int型数组的长度
- Ubuntu下读取某个目录下文件时如何设置路径的格式
- C语言中如何求任意一个int型数组的长度?
- 【原创】C语言中如何用长度变量定义数组
- 关于C语言读取文件时候多读一行
- C语言中如何不用STRLEN检测数组长度
- 使用SSH在做插入和修改的时候即使数据库中给字段设置了默认值还是没有用,在表对应的配置文件中也不知道该如何配置。。请教下。。
- 如何处理ODBC中EXCEL驱动读取EXCEL文件中字段长度大于255字符时出现的"数据截断"问题.
- 如何让Spring的配置文件只在开启服务的时候读取?