将0写入二进制文件C++

Das*_*rol 0 c++ binary file

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

我这样做了吗?

码:

int zero = 0;
myfile.write(reinterpret_cast<char *>(&zero),1790*sizeof(char));    
Run Code Online (Sandbox Code Playgroud)

Pau*_*aul 6

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

  • 从技术上讲,行为是未定义的(不是随机的,甚至是任何东西 - 例如,它可能会出现段错误). (2认同)
  • 它比"随机记忆"更糟糕. (2认同)

joh*_*ohn 6

像这样

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

您的代码写入1790个字节,但zero只有四个字节大,因此您最终编写随机垃圾.

另一种方式是

char zero[1790] = { 0 };
myfile.write(zero, sizeof zero);
Run Code Online (Sandbox Code Playgroud)

关键是当你使用write第一个参数的大小写时必须至少与第二个参数的值一样大.