2016-08-23 343 views
4

我有一個簡單的C++程序,它逐行讀取一個文件。一些行包含超過20000個字符。以下程序只能讀取那些大行的4095個字符。我認爲這是因爲緩衝區大小的限制。閱讀大篇幅的解決方案是什麼?C++中getline的緩衝區大小限制

// 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; 
    } 
+0

您的文本文件在打到換行符之前有超過20K個字符? – NathanOliver

+0

@NathanOliver是的,有時超過30K也 –

+0

如果在聲明之後執行'line.reserve(20000);'會發生什麼?這將有助於縮小如果它是'getline'或字符串增長的問題。 – NathanOliver

回答

2

您的輸入,其中n是有問題的行號嘗試sed ${n}p | wc。我的猜測是wc會報告它是4095個字符,或者在位置4096處有一些特殊的東西。

std::getline根據標準沒有緩衝區大小限制。