2013-04-29 503 views
-1

我想將一系列0寫入二進制文件。作爲字符,這應該是一個空間,但是,當我寫入我的文件時,我收到許多其他奇怪的字符。我不寫零,但似乎是別的東西。將0寫入二進制文件C++

我是否正確地做到了這一點?

代碼:

int zero = 0; 
myfile.write(reinterpret_cast<char *>(&zero),1790*sizeof(char));  
+4

你真的應該得到一本關於C/C++的入門書,並研究它。你在這裏有一個非常基本的問題。 – 2013-04-29 17:52:34

+1

首先,讓你的故事筆直!你有大寫字母O,然後你說它是一個字符(即字符),然後它是一個空格(這是ASCII 32)。 – 2013-04-29 17:52:48

+2

有幾件事情是不對的,在這裏:1.你不應該需要reinterpret_cast來解決這個問題。 2.你沒有正確調用'write()'。 3.你似乎不清楚0,'O'和空格字符之間的區別。你需要更多地瞭解指針。但是你可以做到這一點 - 只需要學習一下( – jwd 2013-04-29 17:56:24

回答

6

像這樣

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第一個參數的大小寫必須至少一樣大,第二個參數的值來寫。

6

你正在寫1790個字節的隨機存儲器的起始地址爲&zero。該存儲器的前4個字節將爲零(值爲zero,假設爲sizeof(int)==4),其餘的可能不是。

+2

從技術上講,行爲是未定義的(不是隨機的,甚至什麼都可以)。 – 2013-04-29 17:54:24

+2

它比「隨機存儲器」差得多。 – 2013-04-29 17:54:44