2011-10-06 44 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