为什么 fwrite (with struct) 写入未知符号?
Why does fwrite (with struct) writes unknown symbols?
我想用 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;
结果:
您不能编写二进制数据并期望它是文本。您看到的行为是正常的、预期的和正确的。
例如,想一想数字 30000
。这很容易适合两个字节的 short int
。但是,在文本格式中,您至少有五个字节。如果你 fwrite()
两个字节到外部存储,它将是两个字节包含这些字节的数值,而不是每个数字的文本表示。
在 30000
的示例中,二进制表示为 01110101 00110000
。这在 Intel 机器中是相反的,因为它们是 little-endian。这意味着您文件中的这两个字节可能是十进制的 48 和 118。如果您在本机使用 ASCII 的 PC 上将它们视为字符,它们应该分别显示为 0
和 v
。
我想用 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;
结果:
您不能编写二进制数据并期望它是文本。您看到的行为是正常的、预期的和正确的。
例如,想一想数字 30000
。这很容易适合两个字节的 short int
。但是,在文本格式中,您至少有五个字节。如果你 fwrite()
两个字节到外部存储,它将是两个字节包含这些字节的数值,而不是每个数字的文本表示。
在 30000
的示例中,二进制表示为 01110101 00110000
。这在 Intel 机器中是相反的,因为它们是 little-endian。这意味着您文件中的这两个字节可能是十进制的 48 和 118。如果您在本机使用 ASCII 的 PC 上将它们视为字符,它们应该分别显示为 0
和 v
。