#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;
}
二级指针读写文件
猜你喜欢
转载自blog.csdn.net/qq_39112646/article/details/102734279
今日推荐
周排行