Как загрузить двоичные файлы структур в память - PullRequest
1 голос
/ 18 июня 2019

У меня есть бинарный файл структур, подобных этой:

struct sprite{
     char name;
     unsigned int n;
     float coordinates[n][2];
}

Я должен нести это в памяти (я не знаю, сколько их приходит), чтобы я мог использовать эти координаты.

У меня есть функция, которая переносит эти структуры в память, я думаю, что это правильно, но моя проблема в том, что когда я хочу экспортировать в .txt, я могу видеть, хорошо ли он загружен, и посмотреть, что это даетдвоичный файл, он не печатает меня должным образом.

bool load_sprites(FILE *f, size_t *n, sprites_t **v){
    size_t alloc_size;
    sprites_t s;
    sprites_t *aux;
    if((*v = malloc(sizeof(sprites_t) * INIT_CHOP)) == NULL)
        return false;
    *n = 0;
    alloc_size = INIT_CHOP;
    while(fread(&s,sizeof(s),1,f)){
        if(*n == alloc_size){
            if((aux = realloc(*v,alloc_size * INIT_CHOP *sizeof(sprites_t)))==NULL){
                free(*v);
                *n=0;
                return false;
            }
            *v = aux;
            alloc_size *= INIT_CHOP;
        }
        memcpy(&(*v)[(*n)++],&s,sizeof(s)); 
    }
    return true;
}

Мой вызов функции:

load_sprites(f,&n,&ptr):

А затем, чтобы распечатать это в .txt, я использую:

 for(size_t i = 0; i<n; i++){
  fprintf(fo,"%s ",(ptr+i)->name);
    for(size_t j=0;j<2;j++){
      fprintf(fo,"%.2f  ",ptr->coordinates[i][j]);
    }
    fprintf(fo,"\n\t"); 
}

Мне нужно это, чтобы напечатать мне все содержимое файла, имя объекта и их координаты.Он печатает мне только первые 3 объекта и некоторые координаты хорошо, а другие неправильно:

SHIP -4.00  -6.00  
     4.00  -10.00  
     8.00  14.00  
     0.00  -10.00  
    ST -8.00  -6.00  
     -4.00  229010374656.00  
    ROCK1 0.00  0.00  
     -6.00  -4.00  
     -14.00  0.00  
     -6.00  4.00  
     12799826.00  0.00  
     0.00  0.00  
     0.50  0.50  
     1.00  1.00  
     0.50  0.75  
     0.00  1.00
...