+ -
当前位置:首页 → 问答吧 → 不相关的数组总会造成覆盖(CFile对文件进行操作)

不相关的数组总会造成覆盖(CFile对文件进行操作)

时间:2011-12-14

来源:互联网

我的程序是在自己的硬件和协议上进行文件传输。用到了CFile对文件进行操作,然后调用API函数进一步处理文件。
  首先定义:
   
程序代码:

uint32_t seFileLen;//用于存储发送文件的长度
uint32_t reFileLen;//用于存储接收文件的长度
uint32_t slen[1];//用于存储发送文件的长度
uint32_t rlen[1];//用于存储接收文件的长度
uint32_t abReadIOBuffer[128];//用于存储发送文件
uint32_t abWriteIOBuffer[128];//用于存储接收文件

  先通过Cfile把文件以二进制形式读取进来,得到文件存储到abWriteIOBuffer,文件长度存储到seFileLen;然后把seFileLen赋给slen[0],,调用API发送文件的长度,对方接受并存储在rlen[0],并把rlen[0]赋给reFileLen。
  之后发送文件利用API函数把abReadIOBuffer发送给对方,对方也利用API函数接受并存储到abWriteIOBuffer。
  现在有一个问题,我现在发送的是一个TXT文档,文档里面的内容首字母是h,这个txt文档的大小seFileLen=51;
  可是我接收大的文件大小没问题但是文档内容就变了第一个字母就比那成了3,ascii码51对应哪个的字符是‘3’;而且我单步调试也能看到abWriteIOBuffer内的内容最开始的内容发生了变化,就是把rlen[0]的内容当成了abWriteIOBuffer的开始。
  这种问题是怎么造成的呀?

作者: shixi2012   发布时间: 2011-12-14

先在网卡上抓包,看内容是什么

作者: ouyh12345   发布时间: 2011-12-14

引用 1 楼 ouyh12345 的回复:

先在网卡上抓包,看内容是什么

我用的不是tcp/ip。单步调程序收到的文件大小也确实是51,但是接收得到的数据存到我定义的abReadIOBuffer时最开始的信息就变了后面到没错,我有buffer内容的截图但是穿不了。
还有是不是我犯了一个概念性错误,Cfile里面的file.GetLength()是文件的大小,他是不是file.Read(abWriteIOBuffer,seFileLen);里面abWriteIOBuffer的大小?

作者: shixi2012   发布时间: 2011-12-14

引用 1 楼 ouyh12345 的回复:

先在网卡上抓包,看内容是什么

这里有我调试时的buffer的截图:http://bbs.51cto.com/viewthread.php?tid=903634&extra=page%3D1&frombbs=1

作者: shixi2012   发布时间: 2011-12-14