2017-06-06 80 views
0

當我按照Botan文檔Pipe/Filter Message Processing中的說明操作時,遇到意外的故障位錯誤。Botan pipe failbit exception

我的代碼是非常簡單的:

ifstream in("2.txt", ios::binary); 
ofstream out("2.enc", ios::binary); 
AutoSeeded_RNG rng; 
SymmetricKey key(rng, 16); // a random 128-bit key 
InitializationVector iv(rng, 16); // a random 128-bit IV 

Pipe pipe(get_cipher("AES-128/CBC/CTS", key, iv, ENCRYPTION), new DataSink_Stream(out)); 
pipe.start_msg(); 
in >> pipe; 
pipe.end_msg(); 
cout << in.fail() << endl; 

它總是輸出1,由於failbit總是被設置爲1。

這是一個bug或者是有什麼錯我的代碼?

回答

0

這就是C++輸入流的工作原理;當嘗試通過EOF讀取時,failbit and eofbit are set

我們可以從記錄的Botan代碼中看到operator>> will throw an exception if only failbit is set after extraction is attempted;總之,你在這裏沒有什麼可擔心的。電腦只是告訴你,你消耗了所有的輸入數據。


這不僅僅是什麼eofbit指嚴格意義上的,但牡丹的operator>>作品(閱讀一樣,因爲它可以)的方式需要一個嘗試的讀過去EOF;否則,它不知道何時停止!