2014-04-10 94 views
4

創建一個文件,並用零填滿它:爲什麼failbit()已設置?

dd if=/dev/zero of=/tmp/zeroes count=1 

寫這個小程序提取第一無符號整數,它在文件中遇到。

#include <assert.h> 
#include <fstream> 

int main() 
{ 
    std::ifstream reader("/tmp/zeroes", std::ios_base::binary); 
    uint32_t number; 
    reader >> number; 

    assert(!reader.fail()); 
} 

爲什麼觸發斷言?

+4

即使將流模式設置爲二進制,「>>」爲整數類型也是格式化的輸入函數(使用'num_get',它需要文本表示形式)。 – dyp

+0

@BЈовић如此正確! :| –

+0

@BЈовић更改 – qdii

回答

8

由於/dev/zero提供二進制零,而不是字符 '0',和>>確實(或試圖執行)從文本轉換。

+0

它從文本中讀取。疑難雜症。謝謝 – qdii

相關問題