У меня есть бинарный файл структур, подобных этой:
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