c语言 实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出
来源:互联网 发布:js encodeuri 解码 编辑:程序博客网 时间:2024/06/06 07:24
/*
2 编写一个业务函数,实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。
函数原型有两个,任意选择其一
要求1:请自己任意选择一个接口(函数),并实现功能;70分
要求2:编写测试用例。30分
要求3:自己编写内存释放函数
*/
2 编写一个业务函数,实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。
函数原型有两个,任意选择其一
要求1:请自己任意选择一个接口(函数),并实现功能;70分
要求2:编写测试用例。30分
要求3:自己编写内存释放函数
*/
#include "stdlib.h"#include "stdio.h"#include "string.h"#define LineMaxLen 1024*2//需要求出多少行,按照行分配内存 //在按行读文件,第二次分配内存,把结果copy到第二次分配的内存中char **readFile1(const char *pfilename/*in*/, int *lineNum/*in out*/){intrv = 0, tmplineNum = 0;FILE*fp = NULL;charlineBuf[LineMaxLen];char*pTmp = NULL;char**tmpFile = NULL;if (pfilename==NULL || lineNum==NULL ) {rv = -1;printf("readFile1() err. param err \n");goto End;}fp = fopen(pfilename, "r");if (fp == NULL){rv = -2;printf("fopen() err. \n");goto End;}//第一遍读出多少行while (!feof(fp)){//读每一行memset(lineBuf, 0, sizeof(lineBuf));pTmp = fgets(lineBuf, LineMaxLen, fp);if (pTmp == NULL) {continue;}else{tmplineNum ++;}}tmpFile = (char **)malloc((tmplineNum +1)*sizeof(char *) );if (tmpFile == NULL){goto End;}//第二遍读内容//准备环境tmplineNum = 0;fseek(fp, 0L, SEEK_SET);while (!feof(fp)){//读每一行memset(lineBuf, 0, sizeof(lineBuf));pTmp = fgets(lineBuf, LineMaxLen, fp);if (pTmp == NULL) {continue;}else{int tmplen = strlen(lineBuf);tmpFile[tmplineNum] = (char *)malloc( (tmplen+1)*sizeof(char));if (tmpFile[tmplineNum] == NULL){goto End;}strcpy(tmpFile[tmplineNum], lineBuf );printf("%s", lineBuf);tmplineNum ++;}}End:if (fp != NULL){fclose(fp); }*lineNum = tmplineNum;return tmpFile;}int readFile2(const char *pfilename/*in*/, char ***p/*out*/, int *lineNum/*int out*/){intrv = 0, tmplineNum = 0;FILE*fp = NULL;charlineBuf[LineMaxLen];char*pTmp = NULL;char**tmpFile = NULL;if (pfilename==NULL || lineNum==NULL ) {rv = -1;printf("readFile1() err. param err \n");goto End;}fp = fopen(pfilename, "r");if (fp == NULL){rv = -2;printf("fopen() err. \n");goto End;}//第一遍读出多少行while (!feof(fp)){//读每一行memset(lineBuf, 0, sizeof(lineBuf));pTmp = fgets(lineBuf, LineMaxLen, fp);if (pTmp == NULL) {continue;}else{tmplineNum ++;}}tmpFile = (char **)malloc((tmplineNum +1)*sizeof(char *) );if (tmpFile == NULL){goto End;}//第二遍读内容//准备环境tmplineNum = 0;fseek(fp, 0L, SEEK_SET);while (!feof(fp)){//读每一行memset(lineBuf, 0, sizeof(lineBuf));pTmp = fgets(lineBuf, LineMaxLen, fp);if (pTmp == NULL) {continue;}else{int tmplen = strlen(lineBuf);tmpFile[tmplineNum] = (char *)malloc( (tmplen+1)*sizeof(char));if (tmpFile[tmplineNum] == NULL){goto End;}strcpy(tmpFile[tmplineNum], lineBuf );printf("%s", lineBuf);tmplineNum ++;}}End:if (fp != NULL){fclose(fp); }*lineNum = tmplineNum;*p = tmpFile;return 0;}void readFile2_Free(char **p, int lineNUm){int i = 0;if (p==NULL){return ;}for (i=0; i<lineNUm; i++){free(p[i]);}free(p);}void main21(){char **p = NULL;const char *pfilename = "c:/1.txt";int lineNum = 0, i = 0;p = readFile1(pfilename/*in*/, &lineNum/*in out*/);if (p == NULL){return ;}for (i=0; i<lineNum; i++){printf("%s", p[i]);}readFile2_Free(p, lineNum);system("pause");}void main(){int ret = 0;char **p = NULL;const char *pfilename = "c:/1.txt";int lineNum = 0, i = 0;ret = readFile2(pfilename/*in*/, &p, &lineNum/*in out*/);if (ret != 0){return ;}for (i=0; i<lineNum; i++){printf("%s", p[i]);}readFile2_Free(p, lineNum);system("pause");}
0 0
- c语言 实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出
- 编写一个业务函数,实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。
- 实现按行读取文件,把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。
- C++函数传出参数
- C++函数传出参数
- 函数的传出参数
- 函数传出参数,用指针作为函数的传出参数实现多值返回
- C语言的本质(16)——函数接口的传入参数与传出参数
- 通过指针的指针来实现传出参数
- linux c 利用指针将函数传出参数的值
- 函数之传入参数,传出参数
- 函数的传入和传出参数
- golang语言实现读取csv文件内容,把相同的内容提取到另外一个文件
- springmvc 传出参数
- 传入传出参数
- 如何从后台子shell中把状态传出来
- 接收三个返回参数 考虑把三个串用逗号隔开,然后做为一个变量传出去.
- 函数返回多个值,传入参数和传出参数
- 解决通过URL传值中文乱码问题
- yarn 调度器 resourcemanager 的 Capacity Scheduler 部分配置说明
- 构建自己的Java Web框架(二)之一个Filter引发的血案
- 002——缺少commons-beanutils包
- FCM算法研究(一)
- c语言 实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出
- 下载资源
- 没有行动力的计划只会让你拖延
- 使用Flexible实现手淘H5页面的终端适配二
- 线性回归与特征归一化(feature scaling)
- PHP Cookies
- 基于Kinect-OpenNI-OpenCV-OpenGL的环境三维重构 windows vs2008 深度彩色图像
- alloc、init你弄懂50%了吗?
- ImageLode