二级指针读取文件(显示行数、读取、释放内存)
生活随笔
收集整理的這篇文章主要介紹了
二级指针读取文件(显示行数、读取、释放内存)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.讀取的文件
test.txt
2.c代碼
duQu01.c
#include <stdlib.h> #include <stdio.h> #define _CRT_SECURE_NO_WARNINGS int getFileLine(FILE *file)//文件有幾行 {if (file == NULL){printf("Read failed!");return -1;}int num = 0;//讀取的文件存入bufchar buf[1024] = { 0 };while (fgets(buf, 1024, file)!=NULL){num++;//printf("%s", buf);}//指針移到末尾,需要將文件光標置為文件首fseek(file, 0, 0);printf("文件有幾行:%d\n", num);return num;/*int fseek( FILE *stream, long offset, int origin );第一個參數stream為文件指針第二個參數offset為偏移量,整數表示正向偏移,負數表示負向偏移第三個參數origin設定從文件的哪里開始偏移,可能取值為:SEEK_CUR、 SEEK_END 或 SEEK_SETSEEK_SET: 文件開頭SEEK_CUR: 當前位置SEEK_END: 文件結尾其中SEEK_SET,SEEK_CUR和SEEK_END和依次為0,1和2.*/ } readFileData(FILE *file,int len,char **pArray) {if (file == NULL){//printf("Read failed!");return -1;}if (len <= 0){printf("長度小于0");}if (pArray == NULL){return -1;}//讀取的文件存入bufchar buf[1024] = { 0 };int index = 0;while (fgets(buf, 1024, file) != NULL){//計算第1行有多少字節,加上\0int currentlen = strlen(buf) + 1;//開辟該行空間char *cp = malloc(sizeof(char)*currentlen);//復制到cpstrcpy(cp, buf);//將數據拷貝到堆區內存中pArray[index++] = cp;//釋放緩沖區memset(buf, 0, 1024);} }//顯示數據 show(char **pArray, int len) {for (int i = 0; i < len; i++){printf("第%d行是:%s",i+1,pArray[i]);} }//釋放內存 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 = NULL;file=fopen("./test.txt", "r");if (file == NULL){printf("Read failed!");//return 0;}//文件有幾行int len = getFileLine(file);//堆區開辟len個char*空間,二級指針char **pArray = malloc(sizeof(char*)*len);//讀取文件數據,存入pArrayreadFileData(file, len, pArray);//顯示數據show(pArray, len);//釋放內存freeSpace(pArray, len);pArray = NULL;//防止野指針 }int main() {test01();system("pause");return 0; }3.結果顯示
總結
以上是生活随笔為你收集整理的二级指针读取文件(显示行数、读取、释放内存)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux云服务ModuleNotFou
- 下一篇: 回调函数案列(C高级)