【问题标题】:How to write data to a binary file in C如何在C中将数据写入二进制文件
【发布时间】:2015-01-17 13:25:55
【问题描述】:

当我尝试将数据写入二进制文件时遇到问题。这是代码:

#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(数量和价格)。我用谷歌搜索了它,这似乎是将数据写入二进制文件的正确功能......但它仍然对我不起作用。我该怎么办? 提前致谢!

【问题讨论】:

标签: c file binary


【解决方案1】:

你的函数工作正常,问题是你写了很多未使用的数据,没有使用正确的工具来查看你的二进制文件。

您将"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 这可能是因为您正在使用文本编辑器打开一个二进制文件。在这种情况下,以二进制形式写入的数字看起来不正确 - 它们显示为“垃圾字符”或被文本编辑器解释为行尾标记。
【解决方案2】:

根据您的代码,您正在尝试编写 x 的地址。但是如果你想写完整的对象,那么你必须先序列化对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 2011-05-29
    • 2014-10-05
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多