二进制文件读取-写入不起作用

用户名

我一直试图在程序中编写一个包含一些信息的二进制文件,但是我无法使其正常工作。我编写并尝试阅读它是否有效。这是我要在文件中写入的结构:

typedef struct{
    int puntuacio;
    int posicio_x;
    int posicio_y;
    int vides;
    int direccio;
}Jugador;

我有一个名为playertype的变量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

JS1
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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

写入二进制文件不起作用

来自分类Dev

读取/写入二进制文件

来自分类Dev

读取已发布的二进制文件并写入新的二进制文件

来自分类Dev

在Clisp中以二进制模式写入/读取文件

来自分类Dev

写入/读取二进制/文本文件

来自分类Dev

写入和读取Java二进制文件

来自分类Dev

二进制文件写入后读取负整数

来自分类Dev

二进制模式下的文件写入和追加不起作用

来自分类Dev

从二进制写入和读取

来自分类Dev

写入二进制文件块

来自分类Dev

写入二进制文件

来自分类Dev

写入二进制文件的末尾

来自分类Dev

写入二进制文件块

来自分类Dev

写入二进制文件

来自分类Dev

写入二进制文件python

来自分类Dev

从txt文件中读取字符、编码并写入二进制文件

来自分类Dev

尝试读取二进制保存的整数时 readInt() 不起作用

来自分类常见问题

Python:从stdin读取和写入Powershell中的二进制文件

来自分类Dev

用python创建查找表,写入可在C程序中读取的二进制文件

来自分类Dev

在Win32上从stdin读取二进制数据,并将其写入文件

来自分类Dev

将Float数组写入二进制文件并快速读取

来自分类Dev

将从数据库读取的数据写入二进制文件

来自分类Dev

在C ++中将大型数据向量写入/读取到二进制文件

来自分类Dev

读取图像的二进制代码以将其写入其他文件

来自分类Dev

如何在Java中从二进制文件写入和读取学生对象

来自分类Dev

C#,从二进制文件写入和读取图像

来自分类Dev

向二进制文件写入/读取std :: set <T>

来自分类Dev

在C ++中向文件流写入/读取二进制字节/整数/长

来自分类Dev

无法使用读取/写入流正确解析和重新组装二进制文件

Related 相关文章

热门标签

归档