Я пытаюсь читать 1244 байт за раз из файла. По сути, идея состоит в сегментировании данных на 100 КБ в пакеты. Таким образом, подход, который я принимаю, заключается в назначении всех данных массиву и создании массива указателей, которые будут содержать начальные позиции для каждого из моих пакетов. Массив указателя содержит значения [0, 1244, 2488 и т.д.].
Он отлично работает, кроме моего первого задания - тарабарщина. k [0] и o [0] оба появляются с мусором, в то время как остальные 79 значений кажутся точными. Может ли кто-нибудь помочь?
Я понимаю, что первый аргумент команды fread должен быть указателем, но это тоже сработало. Кроме того, мне нужны указатели на запуск каждого из моих пакетов, потому что я выполняю другие вызовы функций (пропущенные из кода), которые правильно отформатируют пакет с соответствующими заголовками.
Прошло некоторое время с тех пор, как я закодирован в c/c++, поэтому любая оптимизация, которую вы могли бы предоставить, была бы высоко оценена.
int main(int argc, const char * argv[])
{
FILE *data;
int size; int i;
int paySize = 1244;
//int hdrSize = 256;
data = fopen("text2.dat","r");
//get data size
fseek(data, 0, SEEK_END);
size = ftell(data);
rewind (data);
char k[size]; //initializing memory location for all the data to be read in.
fread(k, 1, size, data); //reading in data
int temp = ceil(size/paySize);
char * o[temp]; //array of pointers to beginning of each packet.
int q = 0;
for (i = 0; i < size; i = i+paySize)
{
o[q] = &k[i];
q++;
}
cout << o[0] << endl; //this outputs gibberish!
cout << o[0] << endl;
печатает адрес, на который указывает этот указатель. Для печати значения по этому адресу используйте:
cout << *o[0] << endl;
Вот:
char k[size];
char * o[temp];
o[q] = &k[i];
вы назначаете o[]
указатели на символы, разыменование такого указателя приводит к одному char
.