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