getline函数

读取输入的一行数据,遇到回车符\n停止。

  • 标准C中没有getline函数,gcc编译器中加入了getline函数,
#include <stdio.h>
  ssize_t getline(char **lineptr, size_t *n, FILE *stream);

其中lineptr指向一个动态分配的内存区域。n是所分配内存的长度。如果lineptr是NULL的话,getline函数会自动进行动态内存的分配(忽略n的大小),所以使用这个函数非常注意的就使用要注意自己进行内存的释放。

如果lineptr分配了内存,但在使用过程中发现所分配的内存不足的话,getline函数会调用realloc函数来重新进行内存的分配,同时更新lineptr和n。

注意
lineptr指向的是一个动态分配的内存,由malloc,calloc或realloc分配的,不能是静态分配的数组。

  • C++在标准库中添加了getline函数,对不同的输入流对象都定义了一个getline函数。
std::fstream::getline
std::istream::getline
std::ifstream::getline
std::iostream::getline
std::wfstream::getline
std::wistream::getline
std::wifstream::getline
std::wiostream::getline
std::stringstream::getline
std::basic_fstream::getline
std::basic_istream::getline
std::istringstream::getline
std::wstringstream::getline
std::basic_ifstream::getline
std::basic_iostream::getline
std::wistringstream::getline
std::basic_stringstream::getline
std::basic_istringstream::getline

在头文件中声明了getline函数:

istream::getline
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

delim参数是指定分隔符。如果不指定的话,默认使用'\n'

void test1(){
    char line[100];
    while(cin.getline(line,100))
        cout<<line<<endl;
}

C++中还定义了一个在std名字空间的全局函数,因为这个getline函数的参数使用了string字符串,所以声明在了头文件中了。

istream& getline ( istream& is, string& str, char delim );
istream& getline ( istream& is, string& str );
void test2(){
    string line;
    while(getline(cin,line))
        cout<<line<<endl;
}

所以在C++中读取一行的函数是不读入换行符的,而GCC中getline函数是读入换行符的。

原文链接: https://www.cnblogs.com/LUO77/p/5763788.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/238601

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午5:53
下一篇 2023年2月13日 下午5:53

相关推荐