Linux系统编程-getline函数

getline函数

getline函数实际是由malloc和realloc函数共同封装而成的,一开始用malloc分配一块空间,不够之后再用realloc函数扩充。

getline的用法

lineptr时存储读取字符串的指针,n时存储该指针指向的地址空间大小,stream是要读取的流。

将包含text的buffer的首地址存到一级指针lineptr中。

getline返回值

成功的话,返回getline成功读到的字符个数,包含分隔符,但不包含'\0'。

失败的话,返回值为-1。

代码实例1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
   FILE *fp;
   char *linebuf;
   size_t linesize;

   if (argc < 2)
   {
       fprintf(stderr, "Usage...\n");
       exit(1);
   }

   fp = fopen(argv[1], "r");

   if (fp == NULL)
   {
       perror("fopen()");
       exit(1);
   }
   
   /*!!!*/
   linebuf = NULL;
   linesize = 0;

   while(1)
   {
      	if (getline(&linebuf, &linesize, fp) < 0)
		break;
	printf("%zu\n", strlen(linebuf));
   }

   fclose(fp);

   exit(0);
}

要打开的makefile文件

运行结果:

一共两行,第一行45个字符,第二行1个字符。

代码实例2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
   FILE *fp;
   char *linebuf;
   size_t linesize;

   if (argc < 2)
   {
       fprintf(stderr, "Usage...\n");
       exit(1);
   }

   fp = fopen(argv[1], "r");

   if (fp == NULL)
   {
       perror("fopen()");
       exit(1);
   }
   
   /*!!!*/
   linebuf = NULL;
   linesize = 0;

   while(1)
   {
      	if (getline(&linebuf, &linesize, fp) < 0)
		    break;
	    printf("%zu\n", strlen(linebuf));
        printf("%zu\n", linesize);
   }

   fclose(fp);

   exit(0);
}

运行makefile文件,可以看出一开始malloc分配的内存为120。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值