2015-11-26 128 views
-4
std::streampos size; 
char * memblock; 

std::ifstream input ("A.JPG", std::ios::in|std::ios::binary|std::ios::ate); 

if (input.is_open()) 
{ 
    size = input.tellg(); 
    memblock = new char [size]; 
    input.seekg (0, std::ios::beg); 
    input.read (memblock, size); 
    input.close(); 

    std::cout << "[INPUT]the entire file content is in memory " << sizeof(memblock) << " \n"; 

} 
delete[] memblock; 

我想使用ifstream來讀取A.JPG(28KB)並將其保存到數組memblock中。但爲什麼memblock的大小是4而不是28403而變量大小等於28403?在C++中將二進制文件讀入字符數組中

謝謝。

+0

變化'的sizeof(memblock)''到的sizeof(* memblock)' –

+1

@RomanZaytsev'的sizeof(* memblock) '在這裏無濟於事。 –

+0

@πάνταῥεῖ請你詳細說明一下嗎?我在想,這種情況等於http://stackoverflow.com/a/37539/5247040 –

回答

0

因爲memblock是一個指針,所以sizeof運算符評估指針變量的大小,即4個字節。

+0

感謝您的回答,但我沒有足夠的聲譽+1您的答案:(但無論如何,你的答案讓我明白了原因) – user44

0

感謝所有,最後我用了矢量。 因爲似乎很難顯示結果我想要(實際字符數組的長度)

std::vector <char> memblock(0); 
    if (input.is_open()) 
    { 
    size = input.tellg(); 
    //memblock = new char [size]; 
    memblock.resize(size); 
    input.seekg (0, std::ios::beg); 
    input.read (&memblock[0], size); 
    input.close(); 


    //std::cout << "[INPUT]the entire file content is in memory " << ((char *)(&memblock+1) - (char *)memblock)/(sizeof(memblock[0])) << " \n"; 
    std::cout << "[INPUT]the entire file content is in memory " << memblock.size() << " \n"; 
+0

沒有錯這個版本使用了矢量,但這不是你原來問題的答案,你說你想把jpeg讀入一個數組,你沒有要求關於不同方法的建議,你的問題是:「爲什麼大小的人是4而不是28403「,並給你一個正確的答案,當有人給你答案時,請將其標記爲已接受。畢竟,我們正在利用業餘時間的一部分來幫助你。 –

+0

@Marko Popovic對不起,其實我仍然想知道如何得到它的長度,而這不是也許我會回答這個問題,我只想分享另一種方式來達到同樣的目標。我認爲我的問題不好,我應該問如何得到長度而不是「爲什麼」。但無論如何,非常感謝您的評論和答覆。我會將其標記爲答案,謝謝。 – user44

相關問題