2012-05-22 78 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