WINCE 下将CString转换成char*出现的问题

haoya84   2007-10-9 10:48 楼主
我在wince下将CString字符串转换成char*,试了网上的好多方法都不成功,下面是我编译通过的,但是结果不对啊!

      CEdit *pEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
     CEdit *pEdit2 = (CEdit*)GetDlgItem(IDC_EDIT2);
     CEdit *pEdit3 = (CEdit*)GetDlgItem(IDC_EDIT3);
     CString str1;
     CString str2;
     CString str3;
     char * szValue1;
     char * szValue2;
     pEdit1- >GetWindowText(str1);
     pEdit2- >GetWindowTextW(str2);
     szValue1=(LPSTR)(LPCTSTR)str1;
     szValue2=(LPSTR)(LPCTSTR)str2;
        
     float fstr1 =atof(szValue1);
     float fstr2 =atof(szValue2);

     float sum=fstr1*fstr2;
     CString str;
     str.Format(L"%f",sum);
     pEdit3- >SetWindowText(str);
程序实现的功能很简单,就是把两个编辑框的内容读过来,转化成浮点型的相乘后再转换成CString后,通过编辑框显示。但是通过程序结果看只能运行1位数的乘法,比如14×12结果就变成了1×1后面的4,2都丢了,通过debug看好像是在szValue1=(LPSTR)(LPCTSTR)str1这个地方转换的是出了错。可能转换后就变成一个字符了,这个转换不是char*吗,怎么就变成char呢?
请达人指点下,谢谢了!

回复评论 (6)

"pEdit1-   >GetWindowText(str1);   
          pEdit2-   >GetWindowTextW(str2);   
          szValue1=(LPSTR)(LPCTSTR)str1;   
          szValue2=(LPSTR)(LPCTSTR)str2;   
"

建议你不要这样获取值.
直接在ClassWizard上定义控件变量吧,那样还可以指定类型,要不然你这样指定转换,值可能已经乱了.
点赞  2007-10-9 10:59
貌似我也碰到这个问题,取出来只是第一个字母,期待达人解决
点赞  2007-10-9 11:14
TCHAR类型的也能直接转为浮点型的啊,何必呢
wcstod
点赞  2007-10-9 11:36
qfeng168 是在什么情况下仅读出一个字母的?
贴点代码看下.

我前段时间做进程间通信,传一个字符串过来的,读过来就是首字母,后来改成Char数组就可以了
点赞  2007-10-9 12:01
我是读取注册表值,读出来转成cstring,但只能取到第一个字母
RegQueryValueEx(hkey, _T("DefaultPrinter"), NULL, &dwtype, keyvalue, &cbData);
CString str_keyvalue = CString(keyvalue)
str_keyvalue只有字符串的第一个字母
点赞  2007-10-9 12:27
LZ的意思是str_keyvalue改成char str_keyvalue[MAX_PATH]?
点赞  2007-10-9 12:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复