char string[4]={"***"};
CEdit EditRed;
EditRed.Attach(GetDlgItem(IDC_EDIT1)->m_hWnd);
TRACE("first\t%d,%d,%d,%d\n",string[0],string[1],string[2],string[3]);
EditRed.GetWindowText(string,3);
TRACE("second\t%d,%d,%d,%d\n",string[0],string[1],string[2],string[3]);
for(n=0;n<=2;n++){
if(string[n]=='*')
break;
if(string[n]>=48&&string[n]<=57)
Sum=Sum*10+string[n]-48;
else{
MessageBox(_T("输入错误"),_T("错误"));
break;
}想将EDIT控件中的3位以下字符串转化为整数.
调试结果
first,42,42,42,42
second 49,0,42,0然后跳出输入错误的对话框,
再然后就发生异常终止了        
请高手指点,不胜感激

解决方案 »

  1.   

    这是你自已设计的结果啊,为什么还要别人为什么呢?
    你在EDIT下输入了"1",因此string字符数组中内容为49,0,42,0,在你的循环中当n=1时,string[n]为0,于是进入else { ...}块中,显示MessageBox(),一切不都在"你的掌握之中"嘛?!
      

  2.   

    但是在EDIT中输入1,为什么string[1],string[3]的值会变成0而string[2]还是42;而if(string[n]>=48&&string[n]<=57)语句的结果会是FALSE;再为什么函数返回后会发生异常终止?请指点,多谢
      

  3.   

    string[1]变成了0,是因为"1"这个字符串的结尾符'\0'.
    string[2]不变,仍是上次的42,是因为你使用EditRed.GetWindowText(string,3);这句时,并没有用得了string[2]以及它后面的内存,所以仍保留前次的内容.
      

  4.   

    EditRed.Detach一下看看如何