C++中getline函数的缓冲区大小限制

7

我有一个简单的C++程序,它逐行读取文件。有些行包含超过20000个字符。下面的程序只能读取那些大行的4095个字符。我认为这是由于缓冲区大小限制引起的。如何解决读取大行的问题?

// reading a text file
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;

    int main () {
      string line;
      ifstream myfile ("new.fasta");
      if (myfile.is_open())
      {
        while ( getline (myfile,line) )
        {
          cout << line.length() << '\n';
        }
        myfile.close();
      }

      else cout << "Unable to open file";

      return 0;
    }

你的文本文件在遇到换行符之前已经超过了20K个字符? - NathanOliver
@NathanOliver 是的,有时候甚至超过30K。 - CPP_NEW
我刚在我的系统中测试了一下,使用了你的程序,我能够读取超过30k个字符。你确定你的数据没有换行符吗? - Amadeus
我尝试了另一个文件,它运行得很好。看起来输入文件存在一些问题。 - CPP_NEW
你能把文件添加到Pastebin或其他地方吗? - Fantastic Mr Fox
显示剩余3条评论
1个回答

3
尝试在输入上使用sed ${n}p | wc,其中n是问题所在的行号。我猜wc将报告它为4095个字符,或者在第4096个位置有特殊字符。
根据标准,std::getline没有缓冲区大小限制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接