2015-11-26 81 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

相关问题