Выделенная память - структура с уже выделенным массивом - PullRequest
0 голосов
/ 14 октября 2019

У меня есть следующий пример:

#define MAX_SIZE 32 

typedef struct T {
     int total_data;
     D *data;
} T;

typedef struct D {
     int type;
     char value[MAX_SIZE];  
} D;

У меня есть часть, которая извлекает и заполняет данные D *;И тот, кто его печатает.

Часть, которая извлекает и заполняет D, извлекает данные из файла.

void extract(T *_t) {
     // Open file
     fscanf(fp, "%d\n", &_t->total_data);
     _t->data = malloc(_t->total_data * sizeof(*_t->data);

     // Extract and fill 
     for ( i = 0; i < _t->total_data; i++) 
         fscanf(fp, "%d:%[^$]\n", &(_t->data[i].type), _t->data[i].value);
 }

Функция, которая читает, выглядит следующим образом:

void read(T *_t) {
    int i; 
    for( i = 0; i < _t->total_data; i++) 
         printf("%d - %s", _t->data[i].type, _t->data[i].value);
}

Но у меня произошел сбой .. Я не знаю почему .. код выглядит нормально для меня в соответствии с тем, что я нашел в Интернете. Не могли бы вы мне помочь ?

Спасибо.

Файлы выглядят так:

2
0:ABC
1:DEFGHI

Например,

1 Ответ

1 голос
/ 14 октября 2019

Эта строка:

fscanf(fp, "%d\n", _t->total_data);

недопустима. _t->total_data - это int, но для сканирования данных вам нужен указатель на int.

Попробуйте

fscanf(fp, "%d\n", &_t->total_data);
                   ^
                   note

Кстати: разве ваш компилятор не предупреждал об этом?

...