为何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
相关产品推荐
相关产品推荐

