我是个初学者,用vs2005新建了一个MFC项目,有三个编辑框,一个按钮,当按下按钮时,消息处理函数将编辑框1和2的内容相加,在编辑框3中显示,
我的消息响应代码如下:(参考孙鑫老师的教程)    int num1,num2,num3;
    char ch1[10]={NULL},ch2[10]={NULL},ch3[10]={NULL};    GetDlgItem(IDC_EDIT1)->GetWindowText((LPTSTR)ch1,10);//读取编辑框1内容
    GetDlgItem(IDC_EDIT2)->GetWindowText((LPTSTR)ch2,10);//读取编辑框2内容    num1=atoi(ch1);//数据变换   设置断点1
    num2=atoi(ch2);//断点2
    num3=num1+num2;//断点3
 //   num3=256;
    itoa(num3,ch3,10);//10进制   断点4
    
    GetDlgItem(IDC_EDIT3)->SetWindowText((LPTSTR)ch3);//我发现在这里如果将ch3改成ch1,ch2均能显示编辑框1和2的内容,调试到断点1时:ch1 内容为
[0] 49 '1' char
[1] 0 char
[2] 53 '5' char
[3] 0 char
[4] 54 '6' char
[5] 0 char
[6] 0 char
[7] 0 char
[8] 0 char
[9] 0 char
               ch2 内容为
                [0] 49 '1' char
[1] 0 char
[2] 53 '5' char
[3] 0 char
[4] 51 '3' char
[5] 0 char
[6] 0 char
[7] 0 char
[8] 0 char
[9] 0 char
ch1和ch2的内容均不为预料中的ch1[0]=1,ch1[1]=5,ch1[2]=6,ch2[0]=1,ch2[1]=5,ch2[2]=3,它们中间怎么隔着一个字符呢,搞不明白????调试到断点2时,num1 = 1;只等于1,我很纳闷……
调试到断点3时,num2 = 1;
恳请高手赐教,本人初学者,没分,见谅啦!

解决方案 »

  1.   

    你的项目是UNICODE的吧.
    你改成非UNICODE的试试,或者将char改成TCHAR,atoi改成_ttoi.
      

  2.   

    VS2005默认使用宽字符
    LPTSTR编译时上被替换为LPWSTR
      

  3.   

        你在调试中看到的ch1和ch2的值是ASCII值或字符值,你只要看右边的值就知道是不是你输入的值,数字和字符显示值是不一样的.
        你让编辑框1输入1,编辑框里输入2,这时你点按钮编辑框就应该会是3.只不过3是通过itoa把数字型转成字符型
        "GetDlgItem(IDC_EDIT3)->SetWindowText((LPTSTR)ch3);//我发现在这里如果将ch3改成ch1,ch2均能显示编辑框1和2的内容"
        你还可以通过这句显示你想显示的内容,比如:
    GetDlgItem(IDC_EDIT3)->SetWindowText("我想显示的内容");
    你试试就知道了.