二级指针操作-文件读写
需求:从文件中读取数据,并且将数据存放到堆区的数组中
- char**pArray=malloc(sizeof(char*)*len)
- 获取有效行数
- 将文件光标置为文件首 fseek(file,0,SEEK_SET)
- 读取文件数据并且放入到pArray中
- 显示数组pArray
- 释放数组pArray
代码示例:
#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];
int num = 0;
while (fgets(buf,1024,file)!=NULL)
{
num++;
}
fseek(file,0,SEEK_SET);
return num;
}
void readFileData(FILE*file,int len,char**pArray)
{
if (file == NULL)
{
return;
}
if (len <= 0)
{
return;
}
if (pArray==NULL)
{
return;
}
char buf[1024];
int index = 0;
while (fgets(buf, 1024, file) != NULL)
{
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\n",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("文件打开失败\n");
return;
}
int len = getFileLines(file);
printf("文件的有行为:%d\n",len);
char **pArrar = malloc(sizeof(char*)*len);
readFileData(file,len,pArrar);
showFileData(pArrar,len);
freeSpace(pArrar,len);
pArrar = NULL;
}
int main()
{
test01();
return EXIT_SUCCESS;
}