C语言高级编程练习题--多级指针文件操作

21 篇文章 0 订阅
8 篇文章 0 订阅
#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值