我写了这段代码:
#include <stdio.h>
int main(void)
{
FILE * fp;
int num[100];
int number;
fp = fopen("myfile.bin", "wb");
for (number = 0; number < 100; ++number)
{
num[number] = number;
}
fwrite(num, 4, 100, fp);
fclose(fp);
return 0;
}
fwrite 在 file 的第一个字节中写下一个多余的字节,值为 00。就像:
00 00 00 00 00 01
int 只有 4 个字节,其他字节正常写入,但第一个字节不行
这里出了什么问题?我通过 GCC 、 Clang 和 TCC 进行了测试,并使用 Bless 和 Ghex 读取了文件。结果相同
我使用的是 Intel Pentium G3220、Debian GNU/Linux 12.5 并使用 GCC 12.2.0-3
十六进制输出:
00 00 00 00 01 00 00 00 02 00 00 00 ...
是小端字节序,每个整数有四个字节:
00 00 00 00
= 0.01 00 00 00
= 1.02 00 00 00
= 2.你似乎认为是:
00 00 00 00 01 00 00 00 02 00 00 00 03 ...
?? | 1 | | 2 | | 3 |
但事实并非如此。事实上,在写入 104 字节整数后,您将得到一个 400 字节的文件,这一点应该很清楚。