2010-01-19 81 views
0

我寫一個程序,讀取一個文件,它的前兩行是怪異的行爲:克++和文件讀取,和Xcode /雪豹

Field of space: 0.4 
226981 20 

然後我想通過226981和20整數變量。所以我這樣做:

ifstream vfile(file_name, ios::in);  
vfile.getline(header,FILENAME); // Read the header-line  
vfile >> nTot >> file_size; 

如果我用g ++編譯程序;我得到nTotfile_size正確的價值觀,22698120,但如果與去年Xcode做的Mac OS X雪豹,我分別得到01634000000

有沒有人遇到過這種錯誤?

回答

0

這可能是_GLIBCXX_DEBUG問題 - 請確保您安裝了最新的Xcode,並且_GLIBCXX_DEBUG對所有代碼和庫都設置相同,並且您可能還需要檢查xcode-users郵件列表。

+0

是的,它更有意義,因爲我只得到這個錯誤在Xcode和Snow Leopard(之前未豹) – asdf 2010-01-19 09:13:27

+1

我發現這裏的解決方案: http://stackoverflow.com/questions/1603300/xcode-3- 2-1和-C-字符串失敗 – asdf 2010-01-19 09:23:36

1

呼叫vfile.getline(header, FILENAME)可能是不正確的。簽名是:

istream::getline(char *s, streamsize n) 

其中s點到輸出緩衝器和n是緩衝區的大小。

我懷疑你的FILENAME是一個整數......它可能是一個char const* g ++隱式轉換爲streamsize? (如果可以的話,使用-Wall -ansi)。這將有一個與編譯器相關的值,如果它小於行的長度,則會使您的流進入錯誤狀態(設置爲failbit)。隨後的讀取將會失敗,直到錯誤狀態被重置。

您應該使用

getline(vfile, header); 

代替,其中headerstd::string