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。
我正在尝试用 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。