zoukankan      html  css  js  c++  java
  • 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 => "
    "
    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] = ''; // end of string add '' 
    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
    ",line);
    43     }
    44     exit(0);
    45 }

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

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    Servlet编程实例 续2
    Servlet编程实例 续1
    Servlet编程实例
    Servlet包介绍
    Servlet处理流程分析
    Servlet简介
    初始String
    类对象的定义
    类和对象
    JDBC编程之程序优化
  • 原文地址:https://www.cnblogs.com/mmtinfo/p/13938624.html
Copyright © 2011-2022 走看看