CString如何Fomat WCHAR*?

zhangwuji155 2008-12-16 03:39:10
CString strTest;
char *chr1 = "天下第一";
char *chr2 = "天下第二";
strTest.Format("%s\n%s\n", chr1, chr2 );
可以,但
WCHAR *wchr1 = (L"天下第一");
WCHAR *wchr2 = (L"天下第二");
该如何Format

strTest.Format((L"%s\n%s\n"), wchr1 , wchr2 );
这样不行,因为Format的第一个参数必须为const char*
...全文
205 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
DarknessTM 2008-12-16
  • 打赏
  • 举报
回复
CString目前 MFC和ATL已经统一了……
zhangwuji155 2008-12-16
  • 打赏
  • 举报
回复
打错了,几个CString相加的办法
zhangwuji155 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 vcPlayer 的回复:]


CString有MFC与ATL两个版本的!!!

C/C++ codeCString strTest;
WCHAR*wchr1=(L"天下第一");
WCHAR*wchr2=(L"天下第二");
strTest.Format(("%ws\n%ws\n"), wchr1 , w…
[/Quote]
很遗憾,英文可以,汉字输出有问题,
其实在实例工作中,我就是用的那种CString相当的办法
lwx300 2008-12-16
  • 打赏
  • 举报
回复
wsprintf(strTest.GetBuffer(512), "%ws\n%ws\n", wchr1, wchr2);

//或:wsprintf(strTest.GetBuffer(512), "%S\n%S\n", wchr1, wchr2);

strTest.ReleaseBuffer();
vcPlayer 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zhangwuji155 的回复:]
引用 12 楼 vcPlayer 的回复:


:(

CString有MFC与ATL两个版本的!!!

C/C++ codeCString strTest;
WCHAR*wchr1=(L"天下第一");
WCHAR*wchr2=(L"天下第二");
strTest.Format(("%ws\n%ws\n"), wchr1 , w…

刚才那个问题就是VCplarer解决的,我对你的答案表示支持,我试一下,
居然被我猜中?我刚才就问,有没有可能是%ws
[/Quote]

%ws并没有在标准中提供支持(虽然结果正确,但要报断言错误,忽略即可),这样子只是“投MFC CString之机取_vstprintf函数之巧”罢了。我原也以为MFC封装了UNICODE的FORMAT,但看起来,你还是用我后一种方法或者其他人说的先转换再FORMAT!
zhangwuji155 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 vcPlayer 的回复:]



:(

CString有MFC与ATL两个版本的!!!

C/C++ codeCString strTest;
WCHAR*wchr1=(L"天下第一");
WCHAR*wchr2=(L"天下第二");
strTest.Format(("%ws\n%ws\n"), wchr1 , w…
[/Quote]
刚才那个问题就是VCplarer解决的,我对你的答案表示支持,我试一下,
居然被我猜中?我刚才就问,有没有可能是%ws
vcPlayer 2008-12-16
  • 打赏
  • 举报
回复
或者你直接用构造函数也行:

CString strTest(wchr1);
strTest += _T("\r\n");
strTest += wchr2;
vcPlayer 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhangwuji155 的回复:]
引用 3 楼 Mackz 的回复:
CStringW

VC区这么多红星的,唉,无语了,
你这个答案在我另一个类似的问题里出现过,我即使记不住你是谁,我也记住这个头像,说了多少次了,不行,不行!
你们亲自试过没?
[/Quote]

:(

CString有MFC与ATL两个版本的!!!

CString strTest; 
WCHAR *wchr1 = (L"天下第一");
WCHAR *wchr2 = (L"天下第二");
strTest.Format(("%ws\n%ws\n"), wchr1 , wchr2 );
一条晚起的虫 2008-12-16
  • 打赏
  • 举报
回复
WCHAR *wchr1 = (L"天下第一");
WideCharToMultiByte()转换为char*;
weidong0210 2008-12-16
  • 打赏
  • 举报
回复
学习
zhangwuji155 2008-12-16
  • 打赏
  • 举报
回复
CString 就是从CStringW或CStringA中派生出来的,
zhangwuji155 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Mackz 的回复:]
CStringW
[/Quote]
VC区这么多红星的,唉,无语了,
你这个答案在我另一个类似的问题里出现过,我即使记不住你是谁,我也记住这个头像,说了多少次了,不行,不行!
你们亲自试过没?
zhangwuji155 2008-12-16
  • 打赏
  • 举报
回复
USES_CONVERSION?我刚才就试了,显示未定义
rookieme 2008-12-16
  • 打赏
  • 举报
回复
CString strTest;
WCHAR *wchr1 = (L"天下第一");

char *s=new char[20];
memset(s,0,20);
WideCharToMultiByte (CP_ACP, 0, wchr1 , -1, s, 20, NULL,NULL); //转换
strTest.Format("%s",s);
delete[] s;
wxfy1977 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Mackz 的回复:]
CStringW
[/Quote]

正解
oyljerry 2008-12-16
  • 打赏
  • 举报
回复
要么明确指定用CStringA还是CStringW,要么i就统一,要么char*,要么wchar*
菜牛 2008-12-16
  • 打赏
  • 举报
回复
CStringW
CodeProject-Jerry 2008-12-16
  • 打赏
  • 举报
回复
WCHAR *wchr1 = (L"天下第一");
WCHAR *wchr2 = (L"天下第二");

CStringW str;
str.Format( L"%s\n%s\n", wchr1 , wchr2 );
aa3000 2008-12-16
  • 打赏
  • 举报
回复
使用 W2A 来转换一下吧

CString strTest;
WCHAR *wchr1 = (L"天下第一");
WCHAR *wchr2 = (L"天下第二");

USES_CONVERSION;
char * p1 = W2A(wchr1);
char * p2 = W2A(wchr2);

strTest.Format((L"%s\n%s\n"), p1, p2 );

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧