2011-10-06 102 views
-1

我有下面的代碼應打印3072個整數數組結束:
打印出一個整數數組垃圾

for(int q=0; q < 3072; q++) printf("%x", band->GetData(q)); 

人會認爲它會打印3072個整數,但我得到3075點的整數與3大概垃圾最後一個。使用此代碼

fp=fopen("filename", "w"); 
fwrite(band->GetBuffer(), sizeof(int), 3072, fp); 
fclose(fp); 

打印到文件結束幾乎相同,除了有在端部3個額外的字節。使用不同的數組會給出不同長度的垃圾。
我想問爲什麼會發生這種情況,以及它是否真的是垃圾。
謝謝。

int GetData(unsigned int pos) const { ASSERT(pos < m_size); return m_data[pos]; } 
int* GetBuffer() { return m_data; } 
+1

什麼是'band-> GetSize()'? – Paulpro

+0

未找到'C++'。 – Chad

+0

它返回數組的大小,在本例中爲3072. – user982842

回答

3

fwrite這個問題可能是因爲你打開在文本模式下的文件,並寫入到文件的任何0x0a字節將擴大到0x0d 0x0a

printf的問題在於,您沒有在數字之間放置任何分隔符,因此您錯誤地計算了輸出。

+0

謝謝,原因實際上是Windows CRLF和我對控制檯和文件輸出之間比較的誤解。當寫入文本文件時,似乎二進制輸出不是如此二進制。 – user982842

+0

解決方法:'fopen(「filename」,「wb」);' – user982842