c - 如何在C中将数据写入二进制文件

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

最佳答案

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

您将 "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;
}

关于c - 如何在C中将数据写入二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27999916/

相关文章:

c - 为什么我不能在 #if 中使用 sizeof()?

Python:通过嵌入复杂的算法改进子字符串搜索

C++ ~ 在客户端调用函数给出错误 : "identifier ____ is undefined"

c# - 如何将 ref byte 转换为 byte[]?

c - 职能调整

c - 使用 C 中的置换 (nPr, nCr) 函数避免整数溢出

Java:部分路径存在,文件的部分名称

java - BufferedWriter 不会将所有数据写入文件

c++ - 使用 write() 将无符号字符写入二进制文件

database - 在数据库中存储和索引二进制字符串