Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c++; std::streampos大小; char*memblock; std::ifstream输入(“A.JPG”,std::ios::in | std::ios::binary | std::ios::ate); if(input.is_open()) { size=input.tellg(); memblock=新字符[大小]; input.seekg(0,std::ios::beg); input.read(内存块、大小); input.close(); std::cout_C++ - Fatal编程技术网

C++ 在c++; std::streampos大小; char*memblock; std::ifstream输入(“A.JPG”,std::ios::in | std::ios::binary | std::ios::ate); if(input.is_open()) { size=input.tellg(); memblock=新字符[大小]; input.seekg(0,std::ios::beg); input.read(内存块、大小); input.close(); std::cout

C++ 在c++; std::streampos大小; char*memblock; std::ifstream输入(“A.JPG”,std::ios::in | std::ios::binary | std::ios::ate); if(input.is_open()) { size=input.tellg(); memblock=新字符[大小]; input.seekg(0,std::ios::beg); input.read(内存块、大小); input.close(); std::cout,c++,C++,因为memblock是指针,所以sizeof操作符的计算结果是指针变量的大小,即4字节。谢谢大家,最后我使用了向量。 因为似乎很难显示我想要的结果(实际字符数组的长度) std::vector memblock(0); if(input.is_open()) { size=input.tellg(); //memblock=新字符[大小]; memblock.resize(大小); input.seekg(0,std::ios::beg); input.read(&memblock[0],大小)

因为
memblock
是指针,所以
sizeof
操作符的计算结果是指针变量的大小,即4字节。

谢谢大家,最后我使用了向量。 因为似乎很难显示我想要的结果(实际字符数组的长度)

std::vector memblock(0);
if(input.is_open())
{
size=input.tellg();
//memblock=新字符[大小];
memblock.resize(大小);
input.seekg(0,std::ios::beg);
input.read(&memblock[0],大小);
input.close();

//std::无法将
sizeof(memblock)
更改为
sizeof(*memblock)
@RomanZaytsev
sizeof(*memblock)
在这里没有帮助。@πάνταῥεῖ 你能详细说明一下吗?我在想,这个例子等于@RomanZaytsev,调用
sizeof(*memblock)
类似于调用
sizeof(memblock[0])
也就是说
sizeof(char)
@RomanZaytsev
sizeof()
无法用于确定在运行时分配的数组大小,计算是在编译时完成的。您的示例适用于静态分配的数组。使用向量的此版本没有问题,但这不是您原始问题的答案。您说要将jpeg读入数组,但没有问您的问题是:“为什么memblock的大小是4而不是28403?”,你得到了一个正确的答案。下次当有人给你答案时,请将其标记为已接受。毕竟,我们正在利用一部分业余时间来帮助你。@Marko Popovic对此表示抱歉,实际上我仍然想知道如何计算答案的长度。这可能不是答案,我只是想分享另一种实现方法同样的目标。我认为我的问题不好,我应该问如何获得长度,而不是“为什么”。但无论如何,真的感谢你的评论和回答。我会把它标记为答案,谢谢。谢谢你的回答,但我没有足够的声誉+1你的回答:(。但无论如何,你的回答让我明白了原因。
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;
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";