| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2873 人关注过本帖
标题:请教VS2010关于字符转换的一个问题
取消只看楼主 加入收藏
hsnowirp
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-19
结帖率:0
收藏
 问题点数:0 回复次数:1 
请教VS2010关于字符转换的一个问题
我编写的程序是:
59 case WM_CHAR:
60     char szChar[20];
61     sprintf_s(szChar,"char is %d",wParam);
62     MessageBox(hwnd,szChar,"char_test",0);
63    break;

调试后出现错误:
1>f:\vc++\vclesson\lesson1\winmain\winmain\winmain.cpp(62): error C2664: “MessageBoxW”: 不能将参数 2 从“char [20]”转换为“LPCWSTR”
1>          与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

在网上查了下,原来VS2010默认是Unicode字符集,MessageBox实际是MessageBoxW,字符需要用_T()转换为Long,我做了如下尝试:

(1)61行改为:sprintf_s(szChar,_T("char is %d"),wParam); 提示错误:
1>f:\vc++\vclesson\lesson1\winmain\winmain\winmain.cpp(61): error C2665: “sprintf_s”: 2 个重载中没有一个可以转换所有参数类型
1>          d:\program files\microsoft visual studio 10.0\vc\include\stdio.h(323): 可能是“int sprintf_s<20>(char (&)[20],const char *,...) throw()”
1>          d:\program files\microsoft visual studio 10.0\vc\include\stdio.h(321): 或       “int sprintf_s(char *,size_t,const char *,...)”
1>          尝试匹配参数列表“(char [20], const wchar_t [11], WPARAM)”时

(2)62行改为:MessageBox(hwnd,_T(szChar),"char_test",0); 提示错误:
1>f:\vc++\vclesson\lesson1\winmain\winmain\winmain.cpp(62): error C2065: “LszChar”: 未声明的标识符


请问如果想把一个参数用_T()转换类型,应该如何编写程序?
另外,我在网上看到有人说使用_T()解决这个办法比更改VS2010字符集为多字节字符集要好,这是为什么?

[ 本帖最后由 hsnowirp 于 2011-3-19 13:24 编辑 ]
搜索更多相关主题的帖子: break 网上 
2011-03-19 13:22
hsnowirp
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-19
收藏
得分:0 
多谢了!

就是觉得以后编写字符的时候都要加上_T() 有点麻烦~
2011-03-19 20:15
快速回复:请教VS2010关于字符转换的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030794 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved