2019独角兽企业重金招聘Python工程师标准>>> hot3.png

要山寨一个函数,只要看两点

  1. 原版函数的形参。

  2. 原函数的返回值。

下面是函数原型。

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

函数返回值。

RETURN VALUE

On  success,  getline() and getdelim() return the number of characters read, including the delimiter character, but not including the terminating null byte.  This value can be used to handle embedded null bytes in the line read.

Both functions return -1 on failure to read a line (including end-of-file condition).

下面是山寨getline 实现代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>ssize_t ho_getline(char **buf, size_t *n, FILE *fp) {char c;int needed = 0;int maxlen = *n;char *buf_ptr = *buf;if (buf_ptr == NULL || maxlen == 0) {maxlen = 128;if ((buf_ptr = malloc(maxlen)) == NULL)return -1;}do {c = fgetc(fp);buf_ptr[needed++] = c;if (needed >= maxlen) {*buf = buf_ptr;buf_ptr = realloc(buf_ptr, maxlen *= 2);if (buf_ptr == NULL) {(*buf)[needed - 1] = '\0';return -1;}}if (c == EOF)return -1;} while (c != '\n');buf_ptr[needed] = '\0';*buf = buf_ptr;*n = maxlen;return needed;
}

测试代码:

void test_main(const char *fname) {FILE *fp;char *line = NULL;size_t len = 0;ssize_t read;fp = fopen(fname, "r");if (fp == NULL)exit(EXIT_FAILURE);while ((read = ho_getline(&line, &len, fp)) != -1) {printf("Retrieved line of length %zu :\n", read);printf("%s", line);}   fclose(fp);free(line);
}int main(void) {test_main("/etc/motd");return 0;
}

转载于:https://my.oschina.net/guonaihong/blog/278505

山寨c 标准库中的getline 函数相关推荐

  1. php spl函数,PHP SPL标准库中的常用函数介绍

    这篇文章主要介绍了PHP SPL标准库中的常用函数介绍,本文着重讲解了spl_autoload_extensions().spl_autoload_register().spl_autoload()三 ...

  2. C++标准库中的数学函数

    C++标准库中的数学函数. 这是一篇我转载的文章,里面有关于数学相关的函数讲解的很详细,供以后自己学习. http://blog.sina.com.cn/s/blog_149e9d2ec0102wxq ...

  3. 课后习题5.13 编写一程序,将两个字符串连接起来,结果取代第一个字符串。 (1)用字符数组,不用stract函数(即自己写一个具有stract函数功能的函数); (2)用标准库中的stract函数;

    课后习题5.13 编写一程序,将两个字符串连接起来,结果取代第一个字符串. (1)用字符数组,不用stract函数(即自己写一个具有stract函数功能的函数): (2)用标准库中的stract函数: ...

  4. Git 源码禁止使用 C 标准库中容易被错用的函数

    Git 项目的源码禁止开发者使用 C 标准库中的某些函数,原因是这些函数太容易被误用,就算使用得当也很容易出问题.因此 Git 的源码增加了一个 banned.h 的头函数,一旦你使用了这些被禁用的函 ...

  5. 在标准IO库中,rewind函数作用?

    在标准IO库中,rewind函数作用? 将文件内部的位置指针重新指向一个流(数据流/文件)的开头 一个完整的信号生命周期包含4个重要的事件,这4个重要事件分别是? 信号诞生:信号在进程中注册完毕:信号 ...

  6. c语言的erase函数,C++ STL标准库中sort,erase,remove_if函数的使用

    本篇介绍C++ STL中常用的几个函数 1.std::sort 1.1.sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以实现对数据的排序. 1.2.sort函数的 ...

  7. C++标准库中各种排序归纳

    一.简介 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.我们在编程过程中会经常接触到排序,比如游戏中的排行榜等.C++标准库中提供了各种不同的排序算法,这篇博 ...

  8. log包在Golang语言的标准库中是怎么使用的?

    Golang 语言的标准库中提供了一个简单的 log 日志包,它不仅提供了很多函数,还定义了一个包含很多方法的类型 Logger.但是它也有缺点,比如不支持区分日志级别,不支持日志文件切割等. 01. ...

  9. iOS标准库中常用数据结构和算法之内存池

    上一篇:iOS标准库中常用数据结构和算法之位串 ⛲️内存池 内存池提供了内存的复用和持久的存储功能.设想一个场景,当你分配了一块大内存并且填写了内容,但是你又不是经常去访问这块内存.这样的内存利用率将 ...

最新文章

  1. 北京科技计算机与通信工程学院,北京科技大学计算机与通信工程学院-任超
  2. 电商行业最复杂的人货场分析,我用一个案例给你讲清楚
  3. 【Flink】Flink Association with remote system akka Connection refused
  4. html 最新计算倒计时,javascript实时计算时间倒计时
  5. Alfresco支持LDAP验证
  6. Encoder与Decoder
  7. webpack热更新和常见错误处理
  8. 一、vmware的安装
  9. 跨界创新属于这个时代的颠覆思想
  10. Mac 用py2app将写好的python代码打包成一个app
  11. K折交叉验证大集合(KFold 、Stratified k-fold、Group k-fold、StratifiedGroupKFold)
  12. 夏日汽车保养 雨季汽车保养
  13. apscheduler使用中的时区问题
  14. “中国保险IT应用高峰论坛2009”现场实录
  15. java中override快捷键_Java高级应用简笔
  16. 黄蓝专场之 | 小蓝单车生死故事
  17. 算法设计与分析-习题-用生成函数求解递归方程f(n)=2f(n/2)+cn,f(1)=0
  18. windows打开虚拟键盘命令
  19. ubuntu 关闭系统自动更新
  20. YYText-显示富文本

热门文章

  1. PHP autoload机制详解
  2. Golang反射机制的实现分析——reflect.Type类型名称
  3. 跨平台PHP调试器设计及使用方法——通信
  4. PyTorch中nn.Module类中__call__方法介绍
  5. 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例
  6. 吴恩达老师深度学习视频课笔记:人脸识别
  7. 深度学习中的最大似然估计简介
  8. tiny-cnn执行过程分析(MNIST)
  9. 【Python】ubuntu14安装pycaffe环境:python2.7及依赖库
  10. 使用svn时碰到的一个的问题