从二进制写入和读取

时间:2017-12-17 14:29:27

标签: c

这是我的代码:

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

而不是数字我得到一个正方形。问题在哪里?

1 个答案:

答案 0 :(得分:3)

问题是您正在使用fwrite来写二进制数据。因此,当您使用fwrite写入整数时,它不会将其格式化为字符串 - 而是写入构成整数的原始字节。在这种情况下,您将存储数字1,它作为一个字节序列(假设为4字节的小尾数int),是(十六进制){{1} }。

当您01 00 00 00文件时,它会自动"删除空字节(更准确地说,终端/控制台忽略它们),但cat字节打印为未知字符,为您提供您看到的方格。

没有固有的问题"关于你如何编写数据,但你不能只使用01来显示数据,因为它适用于文本文件,而不是二进制文件。