Chinaunix首页 | 论坛 | 博客
  • 博客访问: 294386
  • 博文数量: 70
  • 博客积分: 1990
  • 博客等级: 上尉
  • 技术积分: 686
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-02 08:52
文章分类

全部博文(70)

文章存档

2015年(2)

2014年(9)

2013年(2)

2012年(20)

2011年(1)

2010年(36)

分类: C/C++

2012-01-22 21:06:50

getline函数简介:

功能:字符串行输入。读取文件stream的一行,读取内容存放于*lineptr中,读取长度为*n.

声明:

#define _GNU_SOURCE

#include

#include

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

 

实例:

#define _GNU_SOURCE

#include

#include

 

int

main(void)

{

   FILE * fp;

   char * line = NULL;

   size_t len = 0;

   ssize_t read;

   fp = fopen("/etc/motd", "r");   //motd是登陆欢迎消息存放的文件

   if (fp == NULL)

          exit(EXIT_FAILURE);

   while ((read = getline(&line, &len, fp)) != -1) {

          printf("Retrieved line of length %zu :\n", read); 

//%zu中的z表示是由size_t或者ssize_t转换成unsgned int

          printf("%s", line);

   }

   if (line)

          free(line);

   return EXIT_SUCCESS;

}

 

运行效果:

编程心得:

使用getline在获取行输入时不用担心接收缓存溢出,因为接收时只需要提供一个NULL地址的指针即可,接收的数据长度也可以通过int指针获取。

 

在本例中,对line其实使用的是二级指针,即指向line地址的指针。

 

char * line = NULL;

printf("line:%#x\n",&line);          //显示值为line:0xbff42bd8

printf("line:%#x\n",line);             //显示值为line:0

 

即空地址(NULL)也可以有地址。

char * line = NULL;

       *line       line  &line

    未知       0     0xbff42bd8

 

注意,这样初始化的*line值是未知的,不要使用它,否则会出现段错误。

阅读(6321) | 评论(2) | 转发(0) |
0

上一篇:Makefile

下一篇:gdb调试简单例子

给主人留下些什么吧!~~

bluesky22542015-04-30 16:53:20

这是标准库函数,你可以man getline看看。

qulei1592014-04-28 20:53:59

你好,这个函数我有点不理解,该函数是怎么样实现读下一行数据的?