为什么 fwrite 在文件的第一个字节写入过多的字节 00?

问题描述 投票:0回答:1

我写了这段代码:

#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

c gcc
1个回答
1
投票

十六进制输出:

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 字节的文件,这一点应该很清楚。

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