您的位置:首页 > 编程语言 > C语言/C++

C语言文件读取的时候,如何设置数组长度

2018-02-28 21:15 459 查看
当我们使用c语言读取文件的时候,你完全可以使用一个大数组来存放读取的内容,但是这样是不是就造成了很多浪费呢???如果文件内容很大的话,你更不可能使用一个大数组来进行存放了。

最好的办法是使用动态内存分配,当文件内容很大的时候,你完全可以分多次执行。

首先获取到文件的大小确定数组长度

在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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: