C++ 写入0';s转换为二进制文件C++;

C++ 写入0';s转换为二进制文件C++;,c++,file,binary,C++,File,Binary,我想将一系列0写入二进制文件。作为一个字符,这应该是一个空格,但是,当我写入我的文件时,我会收到许多其他奇怪的字符。我不是在写零,而是在写别的东西 我这样做对吗 代码: intzero=0; write(reinterpret_cast(&zero),1790*sizeof(char)); 您正在写入1790字节的随机内存,从地址&zero开始。该内存的前4个字节将是零(假定sizeof(int)=4,则zero的值将是零),其余的可能不是 for (int i = 0; i < 1790

我想将一系列0写入二进制文件。作为一个字符,这应该是一个空格,但是,当我写入我的文件时,我会收到许多其他奇怪的字符。我不是在写零,而是在写别的东西

我这样做对吗

代码:

intzero=0;
write(reinterpret_cast(&zero),1790*sizeof(char));

您正在写入1790字节的随机内存,从地址
&zero
开始。该内存的前4个字节将是零(假定
sizeof(int)=4,则
zero的值将是零),其余的可能不是

for (int i = 0; i < 1790; ++i)
{
    char zero = 0;
    myfile.write(&zero, sizeof(char));
}

关键是,当您使用
write
时,要编写的第一个参数的大小必须至少与要编写的第二个参数的值一样大。

您应该真正获得一本关于C/C++的入门书,并学习它。你有一个很基本的问题。首先,把你的故事讲清楚!你有大写字母O,然后你说它是一个字符(即字符),然后是一个空格(即ASCII 32)。您不需要重新解释_cast来解决此问题。2.您没有正确调用
write()
。3.您似乎不清楚0、'O'和空格字符之间的区别。4.你需要更多地了解指针。但是你可以做到这一点——只要学习一下(:
head-c 1790/dev/zero>myfile
从技术上讲,行为是未定义的(不是随机的,甚至是任何东西,例如,它可能会出错)。它比“随机内存”糟糕得多。
for (int i = 0; i < 1790; ++i)
{
    char zero = 0;
    myfile.write(&zero, sizeof(char));
}
char zero[1790] = { 0 };
myfile.write(zero, sizeof zero);