Чтение данных из файла; первый пакет - бред

0

Я пытаюсь читать 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! 
  • 1
    Потому что это адрес к [я]? То, что вы хотите, может быть * o [0]
  • 0
    в цикле?
Показать ещё 5 комментариев
Теги:
arrays
variable-assignment

1 ответ

0
Лучший ответ
cout << o[0] << endl;

печатает адрес, на который указывает этот указатель. Для печати значения по этому адресу используйте:

cout << *o[0] << endl;

Вот:

char k[size];
char * o[temp];

o[q] = &k[i];

вы назначаете o[] указатели на символы, разыменование такого указателя приводит к одному char.

  • 0
    не хорошо .. печатает знак вопроса .... :(
  • 0
    это означает, что вопросительный знак находится в * o [0]
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню