fwrite 是如何工作的?

How does fwrite work?

我正在尝试用 C 语言编写一个按给定因子缩放位图图像的程序,当我在循环中使用 fwrite() 时:

// Go through each pixel of input bitmap
for (int y = 0; y < inWidth; y++)
{
    fread(pixel, sizeof(RGBTRIPLE), 1, inBMP);

    // Write each pixel to output bitmap (factor) times
    for (int z = 0; z < factor; z++)
    {
        fwrite(pixel, sizeof(RGBTRIPLE), 1, outBMP);
    }
}

一切正常:

但是当我在没有循环的情况下使用 fwrite() 时:

// Go through each pixel of input bitmap
for (int y = 0; y < inWidth; y++)
{
    fread(pixel, sizeof(RGBTRIPLE), 1, inBMP);

    // Write each pixel to output bitmap (factor) times
    fwrite(pixel, sizeof(RGBTRIPLE), factor, outBMP);
}

我明白了:

为什么会这样?

问题是第三个参数count表示ptr指向的数组中有多少元素,而不是ptr指向的实例应有多少次被写。你基本上是在写内存中 ptr 指向的垃圾。

有关详细信息,请参阅 docs