C语言 自定义函数按行读入文件
在之前的博客中 https://www.cnblogs.com/mmtinfo/p/13036039.html 读取一行的getline()函数是GNU 的扩展函数。
这里用自定义函数实现这个功能,从文件中读取整行,不论一行多长,动态分配内存。
1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <string.h> 4 5 char *readLine(FILE *file){ 6 if(file == NULL){ 7 exit(1); 8 } 9 /* malloc linebuffer */ 10 int baseLen = 256; // 初始长度设置256字符 11 char *lineBuf = (char *)malloc(sizeof(char) * baseLen); 12 if(lineBuf == NULL){ 13 exit(1); 14 } 15 16 int ch,index=0; 17 while((ch=fgetc(file)) != 10 && ch != EOF){ // ASCII 10 => "\n" 18 lineBuf[index] = ch; 19 index++; 20 21 if(index == baseLen){ 22 baseLen += 256; 23 lineBuf = (char *)realloc(lineBuf, baseLen); // 内存不足时每次再重新分配256字符空间 24 if(lineBuf == NULL){ 25 exit(1); 26 } 27 } 28 } 29 lineBuf[index] = '\0'; // end of string add '\0' 30 31 return lineBuf; 32 } 33 34 int main(int argc, char *argv[]) 35 { 36 FILE *fp = fopen(argv[1],"r"); 37 if(fp == NULL){ 38 exit(1); 39 } 40 while(!feof(fp)){ 41 char *line = readLine(fp); 42 printf("%s\n",line); 43 } 44 exit(0); 45 }
注:目前还有一点小问题,行内容输出的时候最后回多一个换行,内存分配后没有释放。
作者:天使不设防
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!