如何在C语言中将数据写入二进制文件

如何在C语言中将数据写入二进制文件,c,file,binary,C,File,Binary,我试图将数据写入二进制文件时遇到了一个问题。代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> typedef struct { char name[255]; int quantity; float price; } product; int main() { product x; FILE *f; strcpy(x.name,"

我试图将数据写入二进制文件时遇到了一个问题。代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct
{
char name[255];
int quantity;
float price;
} product;

int main()
{
product x;
FILE *f;
strcpy(x.name,"test");
x.quantity=10;
x.price=20.0;
f=fopen("test.txt","wb");
fwrite(&x,sizeof(x),1,f);
fclose(f);
return 0;
}
#包括
#包括
#包括
#包括
类型定义结构
{
字符名[255];
整数;
浮动价格;
}产品;
int main()
{
产品x;
文件*f;
strcpy(x.name,“测试”);
x、 数量=10;
x、 价格=20.0;
f=fopen(“test.txt”、“wb”);
fwrite(&x,sizeof(x),1,f);
fclose(f);
返回0;
}
当我运行程序时,它只写入x.name字符串,而忽略其他2个(数量和价格)。我在谷歌上搜索过它,这似乎是将数据写入二进制文件的正确函数……但它仍然不适合我。我该怎么办?
提前谢谢

根据您的代码,您正在尝试写入x的地址。但是,如果要写入完整对象,则必须首先序列化对象。

您的函数工作正常,问题是您写入了大量未使用的数据,并且没有使用正确的工具查看二进制文件

您将
“test”
放入名称中,名称大小为255个字符。这将使用前五个字符(四个字母加上空终止符),而剩余的250个字符未使用。它们被写入文件,并且它们的内容成为
“test”
和其他数据之间的“垃圾填充”

如果您编写一个简单的程序来读回文件,您会发现数量和价格都正确地设置为您编写的值:

int main()
{
    product x;
    FILE *f;
    f=fopen("test.txt","rb");
    fread(&x,sizeof(x),1,f);
    fclose(f);
    printf("'%s' - %d %f\n", x.name, x.quantity, x.price);
    return 0;
}

“test”字符串只是一个示例。实际上,我有一个名称更长的数组。但是,我试图忽略字符串,只将数量写入文件,它显示一个空白文件。如果我尝试在控制台中打印数量,它会显示正确的值…@flaviumanica,这可能是因为您正在使用文本编辑器打开一个二进制文件。在这种情况下,以二进制形式书写的数字看起来并不正确——它们显示为“垃圾字符”,或者被文本编辑器解释为行尾标记。