复制二进制文件时何时使用 int 与 char 作为缓冲区?

When to use int vs. char for buffers when copying binary files?

所以我得到了一个问题,说明如下:

写一个void函数将一个二进制文件复制到另一个文件中,一次100字节。该函数接收两个 FILE 指针(src 和 dest)作为参数。

我使用整数类型的数组编写解决方案,但我发现其他一些解决方案使用字符数组。在处理二进制文件时,是否有一个标准来了解何时使用整数数组与字符数组。

例如:

void copy(FILE *src, FILE *dest)
{
    int buffer[SIZE];
    int ret;

    while((ret = fread(buffer, sizeof(int), 100, src)) > 0)
    {
        fwrite(buffer, sizeof(int), ret, dest);
    }
    return;
}

应该可以很好地复制,因为二进制文件显然只是由由 2 个整数 (0,1) 组成的位表示。为什么在复制二进制文件时需要使用字符数组?

  1. 除非有特殊要求,否则通常人们只使用char []。实际上,像 fread()fwrite() 这样的 API 正在使用 char [](实际上是 void *)。

  2. 使用 int [] 没问题(但有点奇怪)但是你的任务需要“一次 100 个字节”所以你应该 fread(buffer, sizeof(int), 100 / sizeof(int), src)(如果文件大小不是 4[1] 的倍数,这不方便 。还要注意 这可能不起作用 如果 sizeof(int) == 8.) 或 fread(buffer, 1, 100, src) (那么你只是将 int [] 用作 char [])。

[1] 我想 sizeof(int) == 4 这是最常见的情况。