C ++:将零写入.bmp文件

时间:2014-03-20 12:22:40

标签: c++

我试图读取.bmp文件,修改它的位图值,然后写入另一个.bmp。

据我所知,每个"字符串"像素以零结尾,但问题是当我尝试写入零值时,程序崩溃。

for (j = 0; j < height * mCoeff; j++)
{
    for (k = 0; k < width * mCoeff; k++)
    {
        fwrite(&newBitmap[j][k].red, 1, 1, output);
        fwrite(&newBitmap[j][k].green, 1, 1, output);
        fwrite(&newBitmap[j][k].blue, 1, 1, output);
    }
    fwrite(0, 1, 1, output); //crashes here
}

错误窗口:http://puu.sh/7Cxn1.png

为了使其正确书写,我应该改变什么?

4 个答案:

答案 0 :(得分:7)

frwite()将指针作为其第一个参数。你正在传递0,它恰好是一个空指针常量 - 所以你的程序取消引用那个空指针并命中断言。

您需要将指针作为第一个参数传递:

char zero = 0;
fwrite(&zero, 1, 1, output);

答案 1 :(得分:3)

fwrite的第一个参数应该是一个const void*指针,指向保存到要写入的数据的缓冲区。您正在传递在0内取消引用的空指针值(fwrite),从而导致未定义的行为。

你需要一个保持零的正确对象:

char c = 0;
fwrite(&c, 1, 1, output);

答案 2 :(得分:2)

  

据我所知,每个&#34;字符串&#34;像素的结尾为零

这是不正确的,扫描线是4字节填充。

最后应该有0,1,2或3个填充字节,因此scanlinesize % 4 == 0

答案 3 :(得分:1)

fwrite(0, 1, 1, output);

您正在编写无效(null)指针。尝试将其写为字符:

char stringEnd = 0; //char 0 = \0
fwrite(&stringEnd, 1, 1, output);