Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2316183
  • 博文数量: 252
  • 博客积分: 5472
  • 博客等级: 大校
  • 技术积分: 3107
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-17 18:39
文章分类

全部博文(252)

文章存档

2012年(96)

2011年(156)

分类: C/C++

2011-10-26 09:38:12

 

  1. CString csPlus;
  2.  CString csSummand;
  3.  m_PlusNumber.GetWindowTextW(csPlus);
  4.  m_Summand.GetWindowTextW(csSummand);
  5.     
  6.  int nPlus = atoi(csPlus.GetBuffer(0)); //将编辑框文本转换成整数
  7. // int nPlus = atoi(strcpy(csPlus.GetBuffer(10),"aa"));
  8.  csPlus.ReleaseBuffer();
  9.  int nSummand = atoi(csSummand.GetBuffer(0));
  10.  csSummand.ReleaseBuffer();
  11.  int nRet = nPlus + nSummand;
  12.  char chRet[128] = {0}; //将结果装换成字符串
  13.  itoa(nRet,chRet,10);
  14.  m_Result.SetWindowTextW(chRet);

  在 5  8   13 行处会报错

原因分析:

这些代码在VC6 下面是可以的  在VC2010下不能通过

VC6默认使用字符ANSII编码方式

VC2010默认使用UNICODE编码方式

为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。

LPWSTRLPCWSTR由此产生,它们的含义类似于LPSTRLPCSTR,只是字符数据是16位的wchar_t而不是char

CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。

在ANSII和UNICODE两种情况下,TCHAR的字符位数不一样,所以会有这样的报错。

最简单的解决方法是工程右键属性 修改编码方式从unicode改为多字节字符集。

 

 

在VC2010中 将CString转换成char  应该使用 _wtoi

5 ,8修改为:

  1. int nPlus = _wtoi(csPlus.GetBuffer(0));

  2.  int nSummand = _wtoi(csSummand.GetBuffer(0));

 

对13行的修改 修改为:

可添加声明

 

  1. CString csRet;

字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值

将chRet赋给csRet

 

  1. csRet = chRet;

最后一行修改为

 

  1. m_Result.SetWindowTextW(csRet);

对13行的修改更简化应该为寻找一种将int型转换成CString的方法。

在VC6中可以直接 

 

  1. csRet.Format("%d",nRet);

但是在2010中不适用。

在VC2010中应该这样写

 

  1. csRet.Format(_T("%d"),nRet);

OK  修改完成 可以运行

 

 

 

阅读(4572) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~