从二进制写入和读取

问题描述 投票:-2回答:1

这是我的代码:

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]

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

c
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.