首页 / C语言 / C语言 百炼成钢22
C语言 百炼成钢22
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C语言 百炼成钢22,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2412字,纯文字阅读大概需要4分钟。
内容图文
/* 题目58: 编写一个业务函数,实现按行读取文件。把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。 函数原型有两个,任意选择其一 要求1:请自己任意选择一个接口(函数),并实现功能;70分 要求2:编写测试用例。30分 要求3:自己编写内存释放函数 */ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> //按行读取文件int ReadFile(constchar *path/*in*/,char ***pout/*out*/,int *row){ int ERRO_MSG = 0; if (path == NULL || pout == NULL || row==NULL) { ERRO_MSG = 1; printf("", ERRO_MSG); return ERRO_MSG; } //定义文件行数int index = 1; //定义二维数组char **parr1 = (char **)malloc(sizeof(char *)*index); memset(parr1, 0, sizeof(sizeof(char *)*index)); if (parr1==NULL) { ERRO_MSG = 2; printf("分配内存失败 erro msg:%d\n", ERRO_MSG); return ERRO_MSG; } //定义文件指针 FILE *pfr = NULL; //打开文件 pfr = fopen(path, "r"); if (pfr == NULL) { ERRO_MSG = 3; printf("打开文件失败 文件路径是%s; erro msg:%d\n",path, ERRO_MSG); return ERRO_MSG; } while (!feof(pfr)){ //定义缓存数组char *buf = (char *)malloc(sizeof(char)* 100); if (buf==NULL) { ERRO_MSG = 5; printf("分配内存失败 erro msg:%d\n", ERRO_MSG); goto FileEND; } memset(buf, 0, sizeof(char)* 100); //fgets()读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋‘\0‘)char *pflag= fgets(buf, 100, pfr); //ferror()函数:获取文件流状态,如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。if (pflag == NULL || ferror(pfr)) { ERRO_MSG = 4; //重置文件流状态,清除错误信号 clearerr(pfr); //注:如果不重置文件流状态,那么下次读取该文件正确状态仍然会报这个错误 printf("按行读取文件失败 erro msg:%d\n", path, ERRO_MSG); goto FileEND; } //数据加入二维数组 parr1[index - 1] = buf; index++; //重新分配内存空间 parr1 = (char **)realloc(parr1, sizeof(char *)*index); } FileEND: //关闭文件指针if (pfr!=NULL) { fclose(pfr); pfr = NULL; } //二维数组最后一个元素置零 parr1[index - 1] = NULL; *pout = parr1; *row = index - 1; return ERRO_MSG; } //打印数据void PeintfA(char **pin/*in*/){ if (pin==NULL) { printf("二维数组指针为空\n"); } printf("以下是读取的数据\n"); while (*pin){ printf("%s\n", *pin); pin++; } } //释放内存int FreeAll(char ***pin/*in*/){ int ERRO_MSG = 0; if (pin == NULL) { ERRO_MSG = 1; printf("", ERRO_MSG); return ERRO_MSG; } char **ptemp = *pin; while (*ptemp){ free(*ptemp); *ptemp = NULL; ptemp++; } //报错:触发了一个断点 //原因:ptemp指针移动位置了if (*pin != NULL) { free(*pin); *pin = NULL; } return ERRO_MSG; } void main(){ char *path = "E:/Look/a.txt"; //定义返回数组char **pres = NULL; //定义返回行 测试参数int row = 0,ret=0; ret = ReadFile(path, &pres, &row); if (ret!=0) { printf("读取文件出错\n"); goto END; } //打印文件 PeintfA(pres); END: FreeAll(&pres); system("pause"); }
原文:http://www.cnblogs.com/zhanggaofeng/p/5597244.html
内容总结
以上是互联网集市为您收集整理的C语言 百炼成钢22全部内容,希望文章能够帮你解决C语言 百炼成钢22所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。