使用 ifstream 的 getLIne C++
Using ifstream's getLIne C++
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对象。
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- 当用户键入分隔符时,停止getline()输入
- getline() 的原型/库是什么;
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 如何在 c++ 中使用 ',' 作为 getline 分隔符
- 错误:调用'getline'没有匹配函数
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 将 getline() 与文件一起使用
- 我有三个 getline,但是一旦编译,输入就太多了
- 在 std::getline 和 std::cin 期间卡在循环中
- 为什么 getline() 不读取文本文件中的所有内容?
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- std::getline没有在while循环中重新请求用户输入
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- Getline(cin,str)的奇怪输出
- 我在C++中使用 getline() 函数时遇到问题
- 而循环跳过 cin.getline() 对于 C 字符串
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)