getline函数

getline函数

C++标准库函数
getline是C++标准库函数;[1]但不是C标准库函数,而是POSIX(IEEE Std 1003.1-2008版本及以上)所定义的标准库函数(在POSIX IEEE Std 1003.1-2008标准出来之前,则只是GNU扩展库里的函数)。getline会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束:1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。
  • 中文名:函数
  • 外文名:getline
  • 类别:程序
  • 特点:生成数字

应用范围

C 有 fgets(),gets() 函数,gcc编译器扩展定义了getline()函数。

用于读取一行字符,包括换行符和字符串终止符。

使用条件

linux标准C中使用条件:

#if defined(_GNU_SOURCE) || _POSIX_C_SOURCE >= 200809L

#include 

函数声明:

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

返回值

成功:返回读取的字节数。

失败:返回-1。

参数:

lineptr:指向存放该行字符的指针,如果是NULL,则有系统帮助malloc,请在使用完成后free释放。

n:如果是由系统malloc的指针,请填0

stream:文件描述符

应用范围

C 有 fgets(),gets() 函数,gcc编译器扩展定义了getline()函数。

用于读取一行字符,包括换行符和字符串终止符。

使用条件

linux标准C中使用条件:

#if defined(_GNU_SOURCE) || _POSIX_C_SOURCE >= 200809L

#include 

函数声明:

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

返回值

成功:返回读取的字节数。

失败:返回-1。

参数:

lineptr:指向存放该行字符的指针,如果是NULL,则有系统帮助malloc,请在使用完成后free释放。

n:如果是由系统malloc的指针,请填0

stream:文件描述符

应用举例

#if defined(_GNU_SOURCE) || _POSIX_C_SOURCE >= 200809L

#include 

#include 

int main(void)

{

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("Retrieved line of length %zu :n", read);

printf("%s", line);

}

if (line)

free(line);

exit(EXIT_SUCCESS);

}

独特性(C++标准库函数)

#include 

using namespace std;

int main( )

{

 cout << "Type the letter 'a': ";

 ws( cin );

 char c[10]={'0'};

 cin.getline(c,10,'#');//将getline换成get试试,情况就大不相同了

 cout<

 char ch=cin.get();

 cout<<"ch="<

 if(ch=='n')

 {

  cout<<"ch equals a new line operator "<

 }

 char ch2=cin.get();

 cout<<"ch2= "<

 cin.get(c,10);

 cout<

 cout<

 cout<

 cout << cin.gcount( ) << endl;

 return 0;

}

get(char*array,int count,char delim)与getline(char*array,int count,char delim)的不同点:

成员函数get有三种版本:无参数的、带一个参数的带三个参数的。不带参数的get函数从指定的输入流中提取(输入)一个字符(包括空白字符)并返回该字符;当遇到输入流中的文件结束符时,返回EOF。为与 ASCII字符值有所区别,EOF的值通常为-1(不同系统中的EOF值有可能是不一样的)。带一个字符型参数的get成员函数自动提取输入流中的下一个字符(包括空白字符)。当遇到文件结束符时,函数返回0(假),否则返回对 Istream对象的引用,并用该引用再次调用get函数。带有三个参数的get成员函数,其三个参数分别是接收字符的字符数组、字符数组的大小和终止字符(默认值为'n')。函数或者在读取比指定的最多字符数少一个字符后结束,或者在遇到终止字符时结束。为使字符数组(被程序用作缓冲区)中的输入字符串能够结束,空字符会被插入到字符数组中。函数不把终止字符放到字符数组中,但是终止字符仍然会保留在输入流中。

成员函数 getline与带三个参数的get函数类似,它读取一行信息到字符数组中然后插入一个空字符。所不同的是,getline要去除输入流中的终止字符,但是不把它存放在字符数组中。

当输入的字符数小于count时遇到字符delim,get函数不会读取delim这个字符,而getline函数将读取这个字符但是不存进array当中去,而是将其丢弃,当然,两者都会在读取的字符串后面自动加上'0'(teminator character)

当输入的字符数大于count时,则get函数只读取count-1个字符,而其余的字符仍然保存在缓冲区中,还可再对其进行读取;但是函数getline则不然。

如果输入行包含的字符数比指定要读取的字符多,那么get()和getline()读取指定数目的字符后,将把余下的字符留在输入队列中。对get()而言,我们可以用另一条读取函数来读取留在输入队列中的数据,你也可以写一段代码将余下的字符清除。不同的是getline()会设置失效位(faibit),并且关闭后面的输入,这个时候用ch=cin.get();是读取不到留在输入队列中的字符的。你可以用下面的命令来恢复输入:cin.clear();因为clear()会重置失效位,打开输入。这个时候ch=cin.get();就可以读取留在输入队列中的字符。

getline()接收一个字符串,可以接收空格,需要包含#in⁃clude,getline()和cin.getline()类似,但是后者属于istream流,而前者属于string流。

外加ignore用法举例一则:

// basic_istream_ignore.cpp

// compile with: /EHsc

#include 

int main( )

{

 using namespace std;

 char chararray[10];

 cout << "Type 'abcdef': ";

 cin.ignore( 5, 'c' );//忽略前5个字符除非遇到字符'c',而停止忽略字符

 //ignore的函数原型为:basic_istream& ignore(streamsize _Count = 1,int_type _Delim = traits_type::eof( ));(摘自MSDN)

 cin >> chararray;

 cout << chararray;

 cout<

 return 0;

}

相关词条

相关搜索

其它词条