我想用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;
结果:
答案 0 :(得分:3)
您不能写入二进制数据并期望它是文本。您看到的行为是正常的,预期的和正确的。
例如,考虑数字30000
。这很容易放入两个字节的short int
中。但是,以文本格式,您至少有五个字节。如果fwrite()
两个字节存储到外部存储器,则将是两个字节,其中包含这些字节的数值,而不是每个数字的文本表示形式。
在30000
的示例中,二进制表示形式为01110101 00110000
。在Intel机器中,这是相反的,因为它们是little-endian。这意味着文件中的这两个字节可能是十进制的48和118。如果您在本地使用ASCII的PC上将它们视为字符,则它们应分别显示为0
和v
。