2012-05-22 56 views
2

我想用C++编写一个指向文件的动态指针。获取动态指针的大小C++

这是我在头文件中的声明:

byte* buffer; 

然后在cpp文件,我分配它:

buffer = new byte[1000]; 

但是规模将在动态分配比1000更大。

然后我写入文件:

ofstream myfile;

myfile.open("test.txt", ios::binary); 
myfile.write((char*)buffer, 1000); 
myfile.close(); 

如果我指定缓冲区的长度为1000,那么1000后的其余字节将被丢弃。如果我使用:sizeof(buffer),那么它只写入1个字节。

如何获得缓冲区的动态大小?

在此先感谢。

+1

什么是坏? – olidev

+1

这不是C++ _style_,并且通常不可能从指向它的元素的指针获取数组的大小。 – sehe

+3

全局变量,'new []','MAGIC_BUFFER_SIZE'不需要转换吗? – Puppy

回答

11

简单:

std::vector<byte> buffer; 
buffer.resize(1000); 
myfile.write(&buffer[0], buffer.size()); 
+0

如果在提问者的代码中需要强制转换为'char *',那么在您的代码中也需要强制转换:'byte'可能是'unsigned char'。 –

+0

为什么不'std :: vector buffer(1000);'。 – Nawaz

+0

@Nawaz:我对这个问题的阅读表明,“缓冲区”的定义和大小发生在不同的地方。如果你能合并它们,你的确应该。 – MSalters

0

缓冲区的大小为1000。这是真的,当你用“新”,它有时可以分配更多的内存,但是这是为了固定下一个“新”来完成。所以在1000个第一个字节之后分配的每个其他内存可能并可能将在未来的“新”中使用。
底线你不能,应该假设你有超过1000字节。

+0

_'但是动态分配的大小将大于1000.'_ – sehe

+0

A.它可能会更大。 B.我想不出有什么理由想要这样做。 C.即使有可能,你也只会有垃圾。 –

+0

我认为你错过了这一点。 '1000'只是一个示例,真正的代码将得到一个指向动态分配数组的char *,这是我的解释。是的,问题的措辞很糟糕 – sehe