You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何fwrite会在文件首字节写入多余的00字节?

问题分析与解答

你的代码本身没有问题,文件内容也完全符合预期,所谓“首字节多余00”是对小端字节序下int类型存储方式的误解。

具体解释:

  • 你的环境是Intel架构CPU,采用小端字节序:多字节数据的低字节存储在内存/文件的低地址位置。
  • num[0]的值是0,作为4字节int,其二进制表示为0x00000000,对应文件中前4个字节都是00,这是完全正确的。
  • num[1]的值是1,二进制表示为0x00000001,小端存储下,文件中接下来的4字节是01 00 00 00,所以你看到的文件开头00 00 00 00 01,正是前4个字节(对应num[0])加上第5个字节(对应num[1]的低字节),完全符合预期。

验证方法:

可以用以下代码读取生成的二进制文件,验证内容正确性:

#include <stdio.h>

int main(void)
{
    FILE * fp;
    int num[100];

    fp = fopen("myfile.bin", "rb");
    if (!fp) {
        perror("无法打开文件");
        return 1;
    }
    fread(num, sizeof(int), 100, fp);
    // 打印前5个元素验证
    for (int i = 0; i < 5; ++i) {
        printf("num[%d] = %d\n", i, num[i]);
    }
    fclose(fp);
    return 0;
}

运行后会输出:

num[0] = 0
num[1] = 1
num[2] = 2
num[3] = 3
num[4] = 4

这说明文件中的数据完全正确,不存在多余字节。

内容的提问来源于stack exchange,提问作者HadiLovelorn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:33:27