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

@ Наваз: мое чтение проблемы предполагало, что определение и размер «буфера» произошло в разных местах. Если вы можете объединить их, вы действительно должны. – MSalters

0

Размер буфера 1000. Это правда, что когда вы используете «новый» иногда может выделять больше памяти, но это делается для того, чтобы закрепить очередной «новый». поэтому каждая другая память, которая была выделена после 1000 первых байтов, может и, вероятно, будет использоваться в будущих «новых».
В нижней строке вы не можете и должны предположить, что у вас есть больше 1000 байтов.

+0

_ 'Тем не менее размер будет больше 1000 в динамическом распределении.' – sehe

+0

A. это 'может быть больше. Б. Я не могу думать о какой-либо причине, которую вы хотели бы сделать. C. даже если бы это было возможно, у вас был бы только хлам. –

+0

Думаю, вам не хватает смысла. «1000» - всего лишь образец, реальный код получит символ *, который указывает на динамически распределенный массив, - это моя интерпретация. Да, вопрос формулировки crummy – sehe

Смежные вопросы