主要实现方法: 二级指针 ------> 指针数组-------->数组中每个元素指向一个堆空间
用到了 三级指针、 二级指针、一级指针的知识。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
void readFile2Mem(char ***pwd,char * path) //要想改变二级指针的指向。需要要到三级指针
{
int lineCount=0;
FILE *fp=fopen(path,"r+"); //以r+方式 打开文件
char buf[1024];
while(fgets(buf,1024,fp)) //按行读取,看有多少行
lineCount++;
rewind(fp); //将文件指针回到文件首
*pwd=(char**)malloc((lineCount+1)*sizeof(char *)); //使二级指针指向一个指针数组
(*pwd)[lineCount]=NULL; //将指针数组最后一个置为NULL的目的是为了之后读取时的方便
char **t=(*pwd); //*pwd 本就就是 二级指针类型
while(fgets(buf,1024,fp)) // 按行读取内容
{
int n=strlen(buf);
*t=(char*)malloc(n+1); //为指针数组的每一个元素都开辟一段空间存储字符串
strcpy(*t,buf);
t++;
}
}
void free1(char **p) //释放堆上的空间
{
while(*p) //先释放指针数组指向的空间
{
free(*p);
p++;
}
free(p); //释放二级指针指向的空间,即:指针数组所占用的空间
}
int main()
{
char **pwd=NULL;
readFile2Mem(&pwd,"pwd.txt"); //在此修改需要读取的文件的路径
while(*pwd)
cout<<*pwd++<<endl;
free1(pwd); //释放堆上的空间
return 0;
}
转载请注明出处。