为什么这段代码在DEBUG下可以正常运行,而在RELEASE下一点按钮程序就关闭?解决方案

为什么这段代码在DEBUG下可以正常运行,而在RELEASE下一点按钮程序就关闭?
void   CMy88Dlg::OnButton1()  
{
char   rusp[2];
char   low[2];
char   high[2];
int   i=0;
int   highchar;
int   lowchar;
char   run[]= "\x0a ";  
                  char   ascall[1000]={0};

CString   a;

for(   highchar   =   0xb0;   highchar <0xf8;   highchar++)
{
itoa(highchar,rusp,16);
sscanf(rusp, "%x ",high);
for(   lowchar=0xa1;   lowchar <0xa3;   lowchar++)
{
itoa(lowchar,rusp,16);
sscanf(rusp, "%x ",low);
memcpy(ascall+i,high,1);
i++;
memcpy(ascall+i,low,1);
i++;

//AfxMessageBox(ascall);
}
memcpy(ascall+i,run,1);
i++;
memcpy(ascall+i,run,1);
i++;

        //CString   a;
//a.Format( "lenth   is   %x ",highchar);
//AfxMessageBox(a);
//AfxMessageBox(ascall);

}
memcpy(ascall+i,run,1);

a.Format( "lenth   is   %d ",i);
AfxMessageBox(a);       //TEST


return;
}

有没有什么不妥之处啊,还是环境的问题呢?多谢

------解决方案--------------------
在release下clear all 再 rebuild all试试
------解决方案--------------------
char rusp[2];
char low[2];
char high[2];
定义的字符长度太短了...后面还有一个零
------解决方案--------------------
char ascall[1000]={0};

设置为静态或全局看看。

这样可以吗?
------解决方案--------------------
cmouse: say

char rusp[2];
char low[2];
char high[2];
定义的字符长度太短了...后面还有一个零
===============================================
的确是这样的。长度太短了!改成3就可以了。
因为sscanf输入完后还有一个0在最后。。


------解决方案--------------------
定义改为
char rusp[3];
char low[4];
char high[4];

其实你都给长一些也可以比如10

ansi因为字符串的结尾都有一个 '\0 '来表示字符串的结束,
所以真正的字符串长度是\0前面的字符串长度,而不是字符数组的长度

这里rusp在进行itoa(highchar,rusp,16);这一句转化时,长度为二,所以rusp
字符数组长度至少应该长度为

sscanf(rusp, "%x ",high);或sscanf(rusp, "%x ",low);这句将high/low转化成1个字符的
字符串,high的长度感觉应该是2,但是由于这里涉及到中文字符,所以涉及到Unicode
的问题,而一个Unicode字符长度是2个char,所以这里low和high数组长度都应该是4