大概的代码如下,IDC_EDIT1等等都是文本框。问题在于最后IDC_EDIT3的那个文本框除了头一位是正确的,后面都是乱码,请问怎么改进?         int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);
SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2);
num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2; itoa(num3,ch3,10); SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);

解决方案 »

  1.   

    将ch1, ch2, ch3都用memset 清空一下。
      

  2.   

    debug下在watch窗口看看ch3 ,就知道了。
    另外 “将ch1, ch2, ch3都用memset 清空一下。” 感觉是必须。
      

  3.   

    我觉得很奇怪啊,
    我看你代码是从IDC_EDIT1  IDC_EDIT2中读取一个数字,那为何要用sendmessage?
    何不用  getdlgitemint   setdlgitemint?岂不是转换都省却了?
      

  4.   

    可能是unicode编码的问题,你可以试一下把他们转换为普通编码
      

  5.   

    char ch1[10],ch2[10],ch3[10];
    //申明成11位看看,再清空一下,保存字符串末尾为'\0'
    char ch1[11],ch2[11],ch3[11];//变量定义感觉像字符,不像字符串数组
    memset(ch1, 0x00, sizeof(ch1));
    memset(ch2, 0x00, sizeof(ch2));
    memset(ch3, 0x00, sizeof(ch3));
    ...SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);//确认该处是0吗?
      

  6.   

    当前是什么编码?多字节?还是Unicode?
      

  7.   


    默认的~好像是Unicode~不过我没检查过~
      

  8.   

    改成这样试试:
    int num1,num2,num3; TCHAR ch1[10],ch2[10],ch3[10]; SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);
    SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2); num1=_ttoi(ch1);
    num2=_ttoi(ch2);
    num3=num1+num2;

    _itot(num3, ch3, 10);

    SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);
      

  9.   

    char ch1,ch2,ch3;能和atoi一起用吗?我这个怎么不能用啊 必须把char改为 TCHAR 后 才能和atoi一起用啊?