二级指针读写文件

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//获取文件的行数
int getFileLines(FILE *file){
	if (file == NULL){
		return -1;
	}
	char buf[1024];//读取到的数据存入到buf
	int num = 0;
	while (fgets(buf,1024,file)!=NULL)
	{
		num++;
		//printf("%s\n",buf);
	}
	//将文件的光标 置为文件首
	fseek(file,0,SEEK_SET);
	return num;
}

//参数1 文件指针 参数2 有效参数 参数3 堆区数组
void readFileData(FILE *file,int len,char **pArray){
	if (file == NULL){
		return;
	}
	if (len <= 0){
		return;
	}
	if (pArray == NULL){
		return;
	}
	char buf[1024];//读取的数据存入到buf
	int index = 0;
	while (fgets(buf,1024,file)!=NULL)
	{
		//buf中就是存放的每行的数据
		/*
		aaaaaaaaaa
		bbbb
		ccccc
		*/
		int currentLen = strlen(buf) + 1;
		char *currentP = malloc(sizeof(char)*currentLen);
		strcpy(currentP,buf);
		pArray[index++] = currentP;
		//清空缓存区
		memset(buf,0,1024);
	}
}
void showFileData(char **pArray,int len){
	for (int i = 0; i < len; i++)
	{
		printf("第%d行的数据为%s",i+1,pArray[i]);
	}
}

void freeSpace(char **pArray,int len){
	for (int i = 0; i < len; i++){
		if (pArray[i]!=NULL)
		{
			free(pArray[i]);
			pArray[i] = NULL;
		}
	}
	free(pArray);
	pArray = NULL;
}
void test01(){
	FILE *file = fopen("./test.txt", "r");
	if (file == NULL){
		printf("文件打开失败");
		return;
	}
	int len = getFileLines(file);
	printf("文件的有效行数为%d\n",len);

	char **pArray = malloc(sizeof(char *)*len);
	//将文件中的数据 读取后 放到pArray中
	readFileData(file,len,pArray);

	//打印数据
	showFileData(pArray,len);
	
	//释放数据
	freeSpace(pArray,len);
	pArray = NULL;

	//关闭文件
	fclose(file);
	
}
int main(){
	test01();
	return 0;
}

发布了122 篇原创文章 · 获赞 58 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_39112646/article/details/102734279