作者loveme00835 (恋さや)
看板C_and_CPP
標題Re: [問題] tellg會吃資料(dev c++)
時間Mon Apr 5 20:29:01 2010
※ 引述《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