看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《htymrednuht (htymrednuht)》之銘言: : 最近使用tellg, seekg出現了問題 : 寫了一個測試的檔案 : 先設立test.txt裡面存 : 1234567890 9876543210 : 1234567890 9876543210 : 1234567890 9876543210 : 然後test.cpp中寫 : ifstream test("test.txt"); : string e; : test >> e; : cout << e << ' ' << test.tellg() << endl; : test >> e; : cout << e << ' ' << test.tellg() << endl; : test >> e; : cout << e << ' ' << test.tellg() << endl; : system("pause"); : test.close(); : 結果出來是 : 1234567890 12 : 876543210 23 : 1234567890 34 : 中間的9不見了 : 請問這是甚麼原因呢? : 謝謝各位 因為在window下換行字元是存成CR LF('\r''\n'), 佔了兩個 bytes 的空間, 從檔案存進緩衝區的時候, 一般都會自動幫你轉換成'\n', 所以讀出資料的時候看不出來 一旦你呼叫了 tellg(現在在檔案的什麼位置?)的時候, 他會想辦法 換回" 原始檔案內的位置" 來給你, 當初換掉 k個 CRLF, 位移量就 多加 k 以上是小弟的見解, 有錯還請不吝指教~ ^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115
htymrednuht:謝謝 我懂了 這樣算不算是dev-c++的compiler有問題? 04/05 20:58
htymrednuht:XD 04/05 20:59
loveme00835:可能是函式庫實作的時候沒測到這bug 0.0 04/05 21:04
VictorTom:不是吧, 你用VC或BCB的compiler就不會遇到這問題嗎?? 04/05 22:16
VictorTom:這個問題主要在於你開檔是txt mode還是bin mode才對吧?? 04/05 22:16
loveme00835:用VC6 & VC2005 剛好都不會發生這問題XD 04/06 03:16