将0写入二进制文件C++
问题描述:
我想将一系列0写入二进制文件。作为字符,这应该是一个空间,但是,当我写入我的文件时,我收到许多其他奇怪的字符。我不写零,但似乎是别的东西。将0写入二进制文件C++
我是否正确地做到了这一点?
代码:
int zero = 0;
myfile.write(reinterpret_cast<char *>(&zero),1790*sizeof(char));
答
像这样
for (int i = 0; i < 1790; ++i)
{
char zero = 0;
myfile.write(&zero, sizeof(char));
}
您的代码写入1790个字节,但zero
只有4个字节大,所以你最终写随机的垃圾。
另一种方式是
char zero[1790] = { 0 };
myfile.write(zero, sizeof zero);
的一点是,当您使用write
第一个参数的大小写必须至少一样大,第二个参数的值来写。
答
你正在写1790个字节的随机存储器的起始地址为&zero
。该存储器的前4个字节将为零(值为zero
,假设为sizeof(int)==4
),其余的可能不是。
+2
从技术上讲,行为是未定义的(不是随机的,甚至什么都可以)。 – 2013-04-29 17:54:24
+2
它比“随机存储器”差得多。 – 2013-04-29 17:54:44
你真的应该得到一本关于C/C++的入门书,并研究它。你在这里有一个非常基本的问题。 – 2013-04-29 17:52:34
首先,让你的故事笔直!你有大写字母O,然后你说它是一个字符(即字符),然后它是一个空格(这是ASCII 32)。 – 2013-04-29 17:52:48
有几件事情是不对的,在这里:1.你不应该需要reinterpret_cast来解决这个问题。 2.你没有正确调用'write()'。 3.你似乎不清楚0,'O'和空格字符之间的区别。你需要更多地了解指针。但是你可以做到这一点 - 只需要学习一下( – jwd 2013-04-29 17:56:24