#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void writeFile()
{
FILE*pFile = fopen("./test.txt", "w");
char buf[5][128] = { "abcdefg\n","hijklmn\n","opq\n","rst\n","uvwxyz\n" };
for (int i = 0; i < 5; i++)
{
fputs(buf[i], pFile);
}
fclose(pFile);
}
int getLine(FILE*pFile)
{
int i = 0;
char buf[1024] = { 0 };
fseek(pFile, 0, SEEK_SET);
while (fgets(buf,1024,pFile)!=NULL)
{
i++;
}
fseek(pFile, 0, SEEK_SET);
return i;
}
void allocateSpace(char**buf,int line, FILE*pFile)
{
for (int i = 0; i < line;i++)
{
char tmp[1024] = { 0 };
fgets(tmp,1024,pFile);
int len = strlen(tmp);
buf[i] = malloc(len);
tmp[len - 1] = '\0';
strcpy(buf[i], tmp);
}
return;
}
void printMsg(char**buf,int line)
{
for (int i = 0; i < line; i++)
{
printf("%s\n", buf[i]);
}
}
void freeMem(char***buf,int line, FILE*pFile)
{
if (*buf!=NULL)
{
for (int i = 0; i < line;i++)
{
if ((*buf)[i]!=NULL)
{
free((*buf)[i]);
(*buf)[i] = NULL;
}
}
free(*buf);
*buf = NULL;
}
fclose(pFile);
return;
}
void test()
{
FILE*fp = fopen("./test.txt", "r");
//获取行数
int line = getLine(fp);
//在堆区开辟内存
char**buf = calloc(line, sizeof(char*));
allocateSpace(buf,line, fp);
printMsg(buf, line);
freeMem(&buf, line, fp);
}
int main()
{
writeFile();
test();
system("pause");
return 0;
}
C语言高级编程练习题--多级指针文件操作
最新推荐文章于 2023-01-20 13:01:37 发布