Re: [問題] tellg會吃資料(dev c++)

看板C_and_CPP (C/C++)作者 (恋さや)時間16年前 (2010/04/05 20:29), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

04/05 20:58, , 1F
謝謝 我懂了 這樣算不算是dev-c++的compiler有問題?
04/05 20:58, 1F

04/05 20:59, , 2F
XD
04/05 20:59, 2F

04/05 21:04, , 3F
可能是函式庫實作的時候沒測到這bug 0.0
04/05 21:04, 3F

04/05 22:16, , 4F
不是吧, 你用VC或BCB的compiler就不會遇到這問題嗎??
04/05 22:16, 4F

04/05 22:16, , 5F
這個問題主要在於你開檔是txt mode還是bin mode才對吧??
04/05 22:16, 5F

04/06 03:16, , 6F
用VC6 & VC2005 剛好都不會發生這問題XD
04/06 03:16, 6F
文章代碼(AID): #1BkTUFMA (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BkTUFMA (C_and_CPP)