使用 ifstream 的 getLIne C++

Using ifstream's getLIne C++

本文关键字:C++ getLIne ifstream 使用      更新时间:2023-10-16

Hello World,

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

困扰我的是getLine方法。参数为istream&getline(char*s,streamsize n);

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

我不明白的是流尺寸n的用途

文件指出:

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

但是,如果我不知道给定线路的长度,我该将流线尺寸n设置为什么?

此外,

ifstream和istream之间有什么区别?

istream更适合读行吗?性能上有差别吗?

感谢您抽出时间

您几乎从不想使用此getline函数。它是std::string定义之前遗留下来的。它用于读取固定大小的缓冲区,所以你可以这样做:

static const int N = 1024;
char mybuffer[N];
myfile.getline(mybuffer, N);

而CCD_ 3是为了防止CCD_ 4在您分配的空间结束后写入内存。

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

std::string input;
std::getline(myfile, input);

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

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