fwrite是如何工作的?

时间:2017-10-19 16:17:47

标签: c fwrite

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

// 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);
    }
}

一切正常:

Input BitmapOutput Bitmap

但是当我使用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);
}

我明白了:

Output Bitmap

为什么会这样?

1 个答案:

答案 0 :(得分:1)

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

有关详细信息,请参阅docs