将整数写入二进制文件

时间:2016-11-25 17:54:58

标签: c

我正在尝试将100个整数写入二进制文件以测试某些内容。

我试过写这个文件,并从中读取。从中读取时,我得到完全随机的数字。

这是关于写作的块。

请注意我打开文件以使用“wb”模式进行写入。我也在最后关闭了文件。

for (int i = 0; i < 99; i++) {
    fwrite(&i, sizeof(int), 1, file);
}

这是关于阅读的块。 请注意我在“rb”模式下打开文件并关闭。

    int num;
    for (int i = 0; i < 100; i++) {
        int rc = getc(file);
        if (rc == EOF) {
            fputs("Error occured while reading file", stderr);
            return EXIT_FAILURE;
    }
    fread(&num, sizeof(int), 1, file);
    printf("%d", num);
}

我的输出是这样的:

-13421772802147469895-168955699232767012640583688388440-104919389914260634872147467638000128293273683884400-19797114882147440795-168947558432767-1097029212883066888388440148657280313254001912147440795-168942592032767-109702911303445504838844014865730434362077432147440795-168935577632767-1097029063753420883766251486573257-6039796492147440795-168932864032767-109702901326841856838844014865733541270-168949760032767-10970289133241241683884401486573450-1090518913214744079500196944831217016018891752457584192041348617175279241952408940298110176910929517683167731702125413116313304413809989891296126535181930809719192433591818324585127960891517680423011935761967-13421772802147469895-168955699232767012640583688388440-104919389914260634872147467638000128293273683884400-19797114882147440795-168947558432767

所以有些不对劲,我不确定究竟是什么。也许我不确定我是否完全理解用于读/写的API(特别是size_t nitems)?我不知道如何判断我需要从文件读取/写入多少字节。

1 个答案:

答案 0 :(得分:3)

在第一个循环中,您正在写入100个整数,从地址“i”开始,99次。

不是我认为你以为你在做什么。

应该是

fwrite(&i, sizeof(int), 1, file);

其次,你打开文件写什么模式?它应该以二进制模式打开,否则它将无法正确保存二进制数据(将'b'添加到fopen模式值)

你是否关闭并重新打开文件以进行读取(并设置正确的文件模式?)或者如果我保持打开状态,你是否在尝试读取值之前回到文件的开头。