我想將一系列0寫入二進制文件。作爲字符,這應該是一個空間,但是,當我寫入我的文件時,我收到許多其他奇怪的字符。我不寫零,但似乎是別的東西。將0寫入二進制文件C++
我是否正確地做到了這一點?
代碼:
int zero = 0;
myfile.write(reinterpret_cast<char *>(&zero),1790*sizeof(char));
我想將一系列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
),其餘的可能不是。
從技術上講,行爲是未定義的(不是隨機的,甚至什麼都可以)。 – 2013-04-29 17:54:24
它比「隨機存儲器」差得多。 – 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