2014-12-19 57 views
-2

我有一個非常困難的時期的代碼塊:Ubuntu的操作系統和g ++如何訪問文件數據在內存中後塊讀取C++

is.open(name.c_str(),ios::in | std::ifstream::binary); } 
while (!is) ; // this is the end of the user input loop, asking for "name" 
// get length of file: 
is.seekg (0, is.end); 
int length = is.tellg(); 
is.seekg (0, is.beg); 
// allocate memory: 
char * buffer = new char [length]; 
// read data as a block: 
is.read (buffer,length); 
is.close(); 

此代碼的工作,並正確顯示整個文件在我的終端上。當我嘗試對文件數據進行其他操作時出現問題。我已經成功此,從上面開始:

is.close(); 
std::cout.write (buffer,length); 
char x; 
int i; 
char *it = buffer; 
char *ip; 
std::cout << "\nbuffer contains: \n\n"; 
ip = it; 
// for (i = 0 ; 10 ; ++i) { 
// std::cout << &ip << "\n"; 
// ip++ ; } 
std::cout << &ip << "\n"; 
*ip++ ; 
std::cout << &ip << "\n"; 
*ip++ ; 
std::cout << &ip << "\n"; 
ip++ ; 
std::cout << &ip << "\n"; 
std::cout << "\n"; 

我用這個,COUT < < 「緩衝液是:」 < < typeid的(*緩衝液)。名稱()< < '\ n';這給了緩衝區是:c。另外,for循環被註釋掉了,因爲它沒有退出。該文件的前8個字符是:(定義,包括空格)上面代碼中的單個語句給出0x7fffa7119610重複4次。

我需要多次搜索文件數據,逐個字符。我該怎麼做才能做到這一點?如果我嘗試將memcpy寫入一個字符數組中,我該如何創建正確大小的數組?

+0

數據已存在於'緩衝區'中,所以您發佈的代碼不會告訴我們您所說的錯誤。 – PaulMcKenzie 2014-12-19 01:16:25

+0

兩件事:1)你發佈的代碼示例是亂碼。什麼是「} while(!is);」應該是關於? 2)解釋你的意思是「文件數據似乎被存儲爲長整數」。那是什麼意思?其實,關於你的問題還有第三個令人困惑的部分:「當我嘗試使用讀取來解決任何輸出問題」。 「閱讀」通常指的是閱讀輸入,而不是輸出。請重寫你的問題並澄清它。 – 2014-12-19 01:16:59

+0

請顯示未按預期工作的代碼。此外,是什麼讓你認爲「文件數據似乎被存儲爲長整數」?它是'char'。我們真正需要幫助的是[MCVE](https://stackoverflow.com/help/mcve)。 – 5gon12eder 2014-12-19 01:17:13

回答

0

1)for循環不會退出,因爲您沒有理由退出。你的條件(中間部分,在兩個分號之間)只是一個常數10:在C/C++的世界中,總是true(因爲它不是0)所以循環從不退出。你需要像

for(i = 0; i < 10; i++) 

如果你想循環運行10次。

2)您得到相同的值打印4次,因爲這是它要求打印! ip是一個指針:你已經在你的表達*ip++遞增它指向值(上一輪你設法更新指針,一次):和已打印指針的地址的它所指向的值的地址或其中包含的值)通過傳遞&ipcout

相關問題