我有一个结构如下的二进制文件:
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");
}
我需要用它来打印文件的所有内容,对象名称及其坐标。它仅向我输出前三个对象,并且一些坐标正确,而另一些错误:
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