2011-08-13 113 views
2

我正在嘗試讀取文件並輸出內容。一切正常,我可以看到內容,但它似乎在最後增加了大約14個空字節。有誰知道這個代碼有什麼問題嗎?C++ Ifstream讀取太多?

    int length; 
        char * html; 


        ifstream is; 
        is.open ("index.html"); 
        is.seekg (0, ios::end); 
        length = is.tellg(); 
        is.seekg (0, ios::beg); 
        html = new char [length]; 

        is.read(html, length); 
        is.close(); 
        cout << html; 
        delete[] html; 

回答

5

那是因爲html不是空值終止字符串,std::cout保持打印字符,直到它找到\0,或者它可能會崩潰你的程序

這樣做:

html = new char [length +1 ]; 

is.read(html, length); 
html[length] = '\0'; // put null at the end 
is.close(); 
cout << html; 

或者,你可以這樣做:

cout.write(html, length); 

cout.write將在length之後正好停止打印字符數。

+1

工作正常!非常感謝!總是最小的事情:/ – Kraffs

7

你沒有在你的char數組上放置一個空終止符。這不是ifstream太多的讀取,cout只是不知道何時停止打印而沒有null終止符。

如果你想閱讀整個文件,這是很容易:

std::ostringstream oss; 
ifstream fin("index.html"); 
oss << fin.rdbuf(); 
std::string html = oss.str(); 
std::cout << html; 
+0

+1。 IIRC尋求技巧甚至不足以告訴你文件的大小,特別是當你用文本模式打開文件時。 –