读取文件中的内容 并打印(c语言实现)

主要实现方法: 二级指针  ------> 指针数组-------->数组中每个元素指向一个堆空间

用到了 三级指针、 二级指针、一级指针的知识。

#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;
}

 转载请注明出处。

猜你喜欢

转载自blog.csdn.net/qq_29824717/article/details/81205719
今日推荐