我有一個非常困難的時期的代碼塊: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寫入一個字符數組中,我該如何創建正確大小的數組?
數據已存在於'緩衝區'中,所以您發佈的代碼不會告訴我們您所說的錯誤。 – PaulMcKenzie 2014-12-19 01:16:25
兩件事:1)你發佈的代碼示例是亂碼。什麼是「} while(!is);」應該是關於? 2)解釋你的意思是「文件數據似乎被存儲爲長整數」。那是什麼意思?其實,關於你的問題還有第三個令人困惑的部分:「當我嘗試使用讀取來解決任何輸出問題」。 「閱讀」通常指的是閱讀輸入,而不是輸出。請重寫你的問題並澄清它。 – 2014-12-19 01:16:59
請顯示未按預期工作的代碼。此外,是什麼讓你認爲「文件數據似乎被存儲爲長整數」?它是'char'。我們真正需要幫助的是[MCVE](https://stackoverflow.com/help/mcve)。 – 5gon12eder 2014-12-19 01:17:13