我一直试图在程序中编写一个包含一些信息的二进制文件,但是我无法使其正常工作。我编写并尝试阅读它是否有效。这是我要在文件中写入的结构:
typedef struct{
int puntuacio;
int posicio_x;
int posicio_y;
int vides;
int direccio;
}Jugador;
我有一个名为player
type的变量Jugador
。在该函数中,我使用二进制文件player
作为指针接收(so Jugador *player
)。这是我编写的代码(我只给出相关部分):
f=fopen("whatever.bin","wb+");
fwrite(nom,sizeof(char),strlen(nom),f); //nom is a string containing the player's name
fwrite(&player,sizeof(Jugador*),1,f);
auxint=player->direccio; //just doing this to see if I pass the info correctly
fwrite(&auxint,sizeof(int),1,f);
//auxp, auxjug and auxint are auxiliar variables I declared inside the function
fseek(f,0,SEEK_SET); //go to the start of the file before reading
fread(auxp,sizeof(char),20,f);
fread(&auxjug,sizeof(Jugador),1,f);
fread(&auxint,sizeof(int),1,f);
printf("auxp:%s--\n",auxp);
printf("puntuacio:%d--\n",auxjug.puntuacio);
printf("dir:%d--\n",auxjug.direccio);
printf("posx:%d--\n",auxjug.posicio_x);
printf("posy:%d--\n",auxjug.posicio_y);
printf("vids:%d--\n",auxjug.vides);
printf("auxint:%d--",auxint);
auxp
正确打印名称,但是在字符串的最后一个位置出现了一个额外的垃圾字符,但这很容易解决。auxint
打印完美。但是当我打印的参数时,我得到的是内存地址auxjug
。
fwrite(&player,sizeof(Jugador*),1,f);
仅将指针大小的元素(4或8个字节)写入文件。您需要具备:
fwrite(player,sizeof(Jugador),1,f);
没有多余&
的东西*
。
另一个问题是您仅将strlen(nom)
字节输出到文件。但是,当您读取文件时,您恰好读取了20个字节。因此,您应该将nom
字符串填充到20个字节,然后f恰好将20个字节写入文件:
fwrite(nom,sizeof(char),20,f);
...
fread(auxp,sizeof(char),20,f);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句