从文件中读取数据,并且将数据存放到堆区的数组中
测试源码
#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", 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("文件打开失败\n");
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);
file = NULL;
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
测试结果