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

C++:将零写入.bmp文件,c++,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[

我正在尝试读取.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
}
错误窗口:

要使其正确写入,我应该更改什么?

fR将指针作为其第一个参数。您正在传递0,它恰好是一个空指针常量-因此您的程序取消引用该空指针并点击断言

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

char zero = 0;
fwrite(&zero, 1, 1, output);
frwite将指针作为其第一个参数。您正在传递0,它恰好是一个空指针常量-因此您的程序取消引用该空指针并点击断言

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

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

您需要一个适当的对象来保持零:

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

您需要一个适当的对象来保持零:

char c = 0;
fwrite(&c, 1, 1, output);
您正在写入无效的空指针。试着把它写成一个字符:

char stringEnd = 0; //char 0 = \0
fwrite(&stringEnd, 1, 1, output);
您正在写入无效的空指针。试着把它写成一个字符:

char stringEnd = 0; //char 0 = \0
fwrite(&stringEnd, 1, 1, output);
据我所知,每一串像素都以零结尾

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

末尾应该有0、1、2或3个焊盘字节,以便scanlinesize%4==0

据我所知,每一串像素都以零结尾

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


末尾应该有0、1、2或3个pad字节,因此scanlinesize%4==0

可能是流输出有问题。在尝试写入之前,您是否检查了返回代码并确保输出有效?@rririwer流一切正常。当像fread&foo,1,1,input这样的东西时,它工作得很好;fwrite&foo,1,1,输出;已写入。可能是流输出有问题。在尝试写入之前,您是否检查了返回代码并确保输出有效?@rririwer流一切正常。当像fread&foo,1,1,input这样的东西时,它工作得很好;fwrite&foo,1,1,输出;是writen。@Angew我刚刚测试过,我的代码段确实将0写入文件。它为什么要写0的ASCII码?或者您是说op正在查找\0,而不是0?我有点困惑。@computerfreaker Angew是对的,我不是要写零符号的ASCII码,而是要写0或null码。如果你用十六进制编辑器打开一张图片,你会看到每一个像素串后面都有零。这就是我需要写的。@user3441917啊,谢谢你的澄清,我误解了你。我将编辑我的答案以确保正确性。@computerfreaker谢谢:@Angew我刚刚测试过,我的代码段确实将0写入文件。它为什么要写0的ASCII码?或者您是说op正在查找\0,而不是0?我有点困惑。@computerfreaker Angew是对的,我不是要写零符号的ASCII码,而是要写0或null码。如果你用十六进制编辑器打开一张图片,你会看到每一个像素串后面都有零。这就是我需要写的。@user3441917啊,谢谢你的澄清,我误解了你。我将编辑我的答案以确保其正确性。@computerfreaker谢谢:这可能就是我可以打开结果文件的原因。我猜你刚才阻止我再问一个问题了,谢谢:事实上,你刚刚完成了我的课程,我已经工作了几个月了。谢谢!这可能就是我可以打开结果文件的原因。我猜你刚才阻止我再问一个问题了,谢谢:事实上,你刚刚完成了我的课程,我已经工作了几个月了。谢谢!