VS2005把我弄晕了
来源:互联网 发布:淘宝一手货源网 编辑:程序博客网 时间:2024/05/17 06:52
今天头一回在vs2005上写UDP通讯程序,没想到遇到这么多麻烦。那么多类型转换出错:
LPCSTR,wchar,这之类的,把我搞糊涂了,以前没接触过这种东西,不了解这些该怎么转换。
VC6里面都可以直接换,2005里却搞那么麻烦,真是苦了我这样的新手.
作个记号
1.首先是CString转成char*的问题:
在VC6里面都是
CString str;
char *buf=new char[str.GetLength()+1];
buf=str.GetBuffer(len);
这个在vs2005里就不行,会提示不能将wchar*转换成char*的。GetBuffer()得到的是wchar*类型.
试了网上的好多方法,错误是可以消除,但是好像有信息丢失,输入的字符和输出的字符不一样。
经过百般折腾我用下面的方法可以达到我的要求:
buf=new char[1024];
int len=str.GetLength();
wcstombs(wsabuf.buf,str.GetBuffer(0),len+1); //这个是将wchar_t*换成char*的函数,有对称的另外的函数mbstowcs
2.CString的Format问题
当我写出下面这样的语句:
CString str;
str.Format("用户%s发来信息:%s",inet_ntoa(m_addrClient.sin_addr),wsabuf.buf);
时,在VC6里面是完全没错误的。
但是在2005里会报错,不能将参数1从const char【16】转成wchar_t*,因为这里参数都是要wchar_t*的,虽然可以加_T()或者L等方法消除错误,但是一样结果不对(还没搞清楚原因)
于是我换种方法来搞定它:
char recvbuf[1024];
sprintf(recvbuf,"用户%s发来信息:%s",inet_ntoa(m_addrClient.sin_addr),wsabuf.buf);
CString str(recvbuf);
这样也就达到我要求了。虽然麻烦点,但最后总算完成了。
最后才是最重要的来了,如果你对vs2005的这点很不满,你想跟以前在VC6上一样那么方便,那么请记好了:
刚开始建工程的时候有个选项是“使用Unicode“,把这个前面的勾去掉,那样就一切正常了。
- VS2005把我弄晕了
- firefox2把我折磨了
- 把我带到了过去
- 求解,一个统计思路,把我搞晕了~~
- 感谢亲爱的Editor把我弄到首页上去了
- MFC 中的 DataGrid 快把我弄疯了
- 分组 连接的查询把我给弄昏了
- 别把我逼急了
- 你把我娶了吧
- 大学把我变成什么了?
- 一张图,把我震惊了
- 一个控制台带参数的调试把我搞晕了,NND
- 今天开通csdn博客,以后开始写博文了,把我的东西都弄出来
- 深深的被京东的收货地址确认把我到手的玩客云给弄没了
- 一支把我也搞疯了的MV
- 是你把我带入了CSDN
- AHCI VS IDE 把我整疯了。。。
- 垃圾CSDN,把我号删了得了!!!
- 激励人生的10张海报
- Enable Skin support in your Symbian OS applications
- 宽字符跟ASCII——区别及测试
- 客户端无字体时的做法
- xp下用户程序空间分配(7):Heap
- VS2005把我弄晕了
- 在struts2.0中指定日期的输入输出格式
- DateTime 格式
- 2009-08-28
- 最近居然在研究openVMS
- 疑问:Perl读取UTF8编码的文件,显示乱码。
- Singleton
- e62最佳软件之UC浏览器,UCWEB 6.7正式版,免签名版下载
- asp.net中的特殊符号