为什么fwrite(与struct一起)写入未知符号?

时间:2018-12-05 15:43:02

标签: c fwrite

我想用fwrite函数将结构写入txt文件。运行程序时,我在txt文件中看到很多未定义的符号。为什么会发生,如何解决? 我的代码:

FILE *file = NULL;

file = fopen(TASK1_2_FILENAME, "wb");

if (!file) {
    printf("FATAL: File does not exist, exiting.");
    exit(EXIT_FAILURE);
}

Products product;
strcpy(product.date, "00:00:0000");
product.code = 12345;
product.quantity = 10;
product.price = 10.5;

fwrite(&product, sizeof(Products), 1, file);

fclose(file);

头文件中的结构:

typedef struct Product {
    char date[11];
    int code;
    int quantity;
    float price;
} Products;

结果:

enter image description here

1 个答案:

答案 0 :(得分:3)

您不能写入二进制数据并期望它是文本。您看到的行为是正常的,预期的和正确的。

例如,考虑数字30000。这很容易放入两个字节的short int中。但是,以文本格式,您至少有五个字节。如果fwrite()两个字节存储到外部存储器,则将是两个字节,其中包含这些字节的数值,而不是每个数字的文本表示形式。

30000的示例中,二进制表示形式为01110101 00110000。在Intel机器中,这是相反的,因为它们是little-endian。这意味着文件中的这两个字节可能是十进制的48和118。如果您在本地使用ASCII的PC上将它们视为字符,则它们应分别显示为0v