这是我的代码:
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
返回SQUAREIgnasKubilius+37065555555Ku@Ku.lt
。
而不是数字我得到一个正方形。问题在哪里?
答案 0 :(得分:3)
问题是您正在使用fwrite
来写二进制数据。因此,当您使用fwrite
写入整数时,它不会将其格式化为字符串 - 而是写入构成整数的原始字节。在这种情况下,您将存储数字1
,它作为一个字节序列(假设为4字节的小尾数int
),是(十六进制){{1} }。
当您01 00 00 00
文件时,它会自动"删除空字节(更准确地说,终端/控制台忽略它们),但cat
字节打印为未知字符,为您提供您看到的方格。
没有固有的问题"关于你如何编写数据,但你不能只使用01
来显示数据,因为它适用于文本文件,而不是二进制文件。