- CString csPlus;
- CString csSummand;
- m_PlusNumber.GetWindowTextW(csPlus);
- m_Summand.GetWindowTextW(csSummand);
- int nPlus = atoi(csPlus.GetBuffer(0)); //将编辑框文本转换成整数
- // int nPlus = atoi(strcpy(csPlus.GetBuffer(10),"aa"));
- csPlus.ReleaseBuffer();
- int nSummand = atoi(csSummand.GetBuffer(0));
- csSummand.ReleaseBuffer();
- int nRet = nPlus + nSummand;
- char chRet[128] = {0}; //将结果装换成字符串
- itoa(nRet,chRet,10);
- m_Result.SetWindowTextW(chRet);
在 5 8 13 行处会报错
原因分析:
这些代码在VC6 下面是可以的 在VC2010下不能通过
VC6默认使用字符ANSII编码方式
VC2010默认使用UNICODE编码方式
为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数 量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。
LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。
CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。
在ANSII和UNICODE两种情况下,TCHAR的字符位数不一样,所以会有这样的报错。
最简单的解决方法是工程右键属性 修改编码方式从unicode改为多字节字符集。
在VC2010中 将CString转换成char 应该使用 _wtoi
5 ,8修改为:
- int nPlus = _wtoi(csPlus.GetBuffer(0));
- int nSummand = _wtoi(csSummand.GetBuffer(0));
对13行的修改 修改为:
可添加声明
- CString csRet;
字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值
将chRet赋给csRet
- csRet = chRet;
最后一行修改为
- m_Result.SetWindowTextW(csRet);
对13行的修改更简化应该为寻找一种将int型转换成CString的方法。
在VC6中可以直接
- csRet.Format("%d",nRet);
但是在2010中不适用。
在VC2010中应该这样写
- csRet.Format(_T("%d"),nRet);
OK 修改完成 可以运行