
getline不是来自C库函数,而是gcc的扩展定义或者C++库函数。它抓卷句地会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成360百科的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到教医回烧直宣答最大限度。
- 中文名 函数
- 外文名 getline
- 类别 函数
- 特点 生成数字
名词释义
在函数遇到和结束定界符相等的字符时函数来自结束,同时函数抽出定界符,此种情况下该定界符既不被放回输入流,也不被放360百科入要生成的字符串。所以由此可以理解输入言谈约加厂演冷杨承结束后的第一个回车克比是定界符,被确认后抛弃,而第二个才是程序执行运行时正常需要的!
应用范围(gcc扩展定义)
C 有 fgets(), gets() 函数,gcc编译器扩展定义了getline()函数.
用于读取一行字符直到换行符,不读取换行符 .
使用条件
linux标准C中使用条件:
#define _GNU_SOURCE
#i示胞顾地观线急上为nclude <stdio.h>
函数声明:
圆室乱光案罗浓ssize_t getline剂约乙化社(char **lineptr, size_t *n, FILE *stream);
返回值
成功:返回读取的字节数。
失败:返回-1。
参数:
lineptr:指向存放该行字符的指针,如果是NULL,则有系统帮助malloc,请在使用完成后free释放。
n:如果是由系统malloc的指针,请填0
stream:文件描述符
应用举例(gcc扩展定义)
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int main(voi西d)
{
FILE * fp;
char * line 东是防危燃采= NULL;
size_t len = 0;
ssize_t read容升诉伤支死叶加;
fp = fopen("/etc/motd", "r");
来自 if (fp == NULL)
exit(EXIT_FAILURE);
while ((read = getline(&line, &len, fp)) != -1)
{
printf("R民放区助微执义掌七etrieved line of length %zu :\n", read);
printf("%s", 治海line);
}
if (l360百科ine)
free(line);
exit(EXIT_SUCCESS)争厂又许集;
}
独特性(C++函数)
紧操司江十可考状友 //get(char*array,int count,char delim)与getline(char*array,int count,ch饭振ar delim)的不同点:
//1.当输入的字符数小于count时遇到字符delim,get函数不会读取delim这个字符,而get氢谁常孙鲜然板裂伯夫衡line函数将读取这个字符但是不存进array当中去,而是将其丢弃,当然,两者都会在读取的字符串后面自动加上'\0'(teminator character)
//车2.当输入的字符数大于coun直然支t时,则get函数只读取count-1个字符,而其余的字符仍然保存在缓冲区中,还可再对其进行读取;但是函数getline则不然。
//如果输入行包含的字符数比指定要读取的客黑独表字符多,那么get()和认getline()读取指统零权定数目的字符后,将把余下
//的字符留在输入队列中。对get()而言,我们可以用另一条读取函力工责好答黑办督坏油数来读取留在输入队列中的数据,你也可
//以写一段代码将余下的字符清除。不同的是getline()会设置失效位(faibit),并且操始到径酸关闭后面的输入,这个时候
//用ch=cin.get();是读取不到留在输氢谓演现压导运呀入队列中的字符的。你可以用下面的命
//令来恢复输入:
cin.clear();
//因为clea犯七继区r()会重置失效位,打开输入。这个时候ch=cin.get();就可以读取留在输入队列中的字符。
外加ignore用法举例一则: