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 }

注:目前还有一点小问题,行内容输出的时候最后回多一个换行,内存分配后没有释放。

 

posted @ 2020-11-06 19:47  天使不设防  阅读(331)  评论(0编辑  收藏  举报