使用ifstream的getLIne C ++

时间:2014-09-10 01:53:59

标签: c++ ifstream

Hello World,

我是C ++的新手,我正在尝试逐行阅读文本文件。我在网上进行了一些研究,偶然发现了ifstream。

令我不安的是getLine方法。 参数是istream& getline(char * s,streamsize n);

我知道变量s是保存读取行的位置。 (如果我错了,请纠正我)

我不理解的是streamize n用于什么。

文件说明:

Maximum number of characters to write to s (including the terminating null character).

但是,如果我不知道给定的行有多长,我将streamize n设置为什么?

此外,

ifstream和istream有什么区别?

是不是更适合阅读线?性能有差异吗?

感谢您的时间

1 个答案:

答案 0 :(得分:3)

您几乎不想使用此getline函数。它是在定义std::string之前的遗留物。它是用于读入固定大小的缓冲区,因此您可以执行以下操作:

static const int N = 1024;
char mybuffer[N];

myfile.getline(mybuffer, N);

... N用于阻止getline在您分配的空间结束后写入内存。

对于新代码,通常想要使用std::string,并让它扩展以容纳正在读入的数据:

std::string input;

std::getline(myfile, input);

在这种情况下,您不需要指定最大大小,因为字符串可以/将根据输入中行的大小的需要进行扩展。警告:在少数情况下,这可能是一个问题 - 如果(例如)您正在读取数据被送入网站,它可能是攻击者通过提供巨大的数据来进行DoS攻击的一种方式字符串,并让你的系统试图分配过多的内存。

在istream和ifstream之间:istream主要是一个基类,它定义了一个可用于处理各种派生类(包括ifstream对象)的接口。当/如果要从磁盘(或类似的东西)打开文件时,您想要使用ifstream对象。