如何在C中将数据写入二进制文件
How to write data to a binary file in C
我尝试将数据写入二进制文件时遇到问题。这是代码:
#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;
}
当我运行程序时,它只写入x.name字符串,忽略其他2个(数量和价格)。我用谷歌搜索了一下,这似乎是将数据写入二进制文件的正确函数……但它对我来说仍然不起作用。我应该怎么办?
提前致谢!
根据您的代码,您正在尝试写入 x 的地址。但是如果你想写完整的对象那么你必须先序列化对象。
你的函数工作正常,问题是你写了很多未使用的数据,没有使用正确的工具来查看你的二进制文件。
你把"test"
写进名字里,它的长度是255个字符。这用完了前五个(四个字母加上空终止符),而剩余的 250 个字符未使用。它们被写入文件,它们的内容成为 "test"
和其他数据之间的 "junk filling"。
如果您编写一个简单的程序来读回您的文件,您会发现数量和价格都正确设置为您编写的值:
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;
}
我尝试将数据写入二进制文件时遇到问题。这是代码:
#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;
}
当我运行程序时,它只写入x.name字符串,忽略其他2个(数量和价格)。我用谷歌搜索了一下,这似乎是将数据写入二进制文件的正确函数……但它对我来说仍然不起作用。我应该怎么办? 提前致谢!
根据您的代码,您正在尝试写入 x 的地址。但是如果你想写完整的对象那么你必须先序列化对象。
你的函数工作正常,问题是你写了很多未使用的数据,没有使用正确的工具来查看你的二进制文件。
你把"test"
写进名字里,它的长度是255个字符。这用完了前五个(四个字母加上空终止符),而剩余的 250 个字符未使用。它们被写入文件,它们的内容成为 "test"
和其他数据之间的 "junk filling"。
如果您编写一个简单的程序来读回您的文件,您会发现数量和价格都正确设置为您编写的值:
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;
}