这是我的代码:
typedef struct contact
{
char name[20];
char surname[20];
char phoneNumber[13];
char email[50];
} Contact;
int dataBaseQuantity = 0;
FILE *f = fopen(".bin", "ab+");
if(f != NULL)
{
dataBaseQuantity++;
fwrite(&dataBaseQuantity, sizeof(int), 1 ,f);
fwrite(&input.name, sizeof(char), strlen(input.name), f);
fwrite(&input.surname, sizeof(char), strlen(input.surname), f);
fwrite(&input.phoneNumber, sizeof(char), strlen(input.phoneNumber), f);
fwrite(&input.email, sizeof(char), strlen(input.email), f);
}
cat .bin
返回[email protected]
。
而不是一个数字我得到一个正方形。问题出在哪儿?
问题是你正在使用fwrite
,它写入二进制数据。因此,当您使用fwrite
写入整数时,它不会将其格式化为字符串 - 而是写入构成整数的原始字节。在这种情况下,你存储的数字1
,作为一个字节序列(假设4字节的小端int
s),是(以十六进制)01 00 00 00
。
当你cat
文件时,它“自动”删除空字节(更准确地说,终端/控制台忽略它们),但01
字节打印为未知字符,给你你看到的方格。
你如何编写数据没有固有的“问题”,但你不能只使用cat
来显示数据,因为它适用于文本文件,而不是二进制文件。