VC++: TCHAR 数组的值怎样才能赋给 wchar_t 数组?

Richard2001 2001-08-31 03:01:11
比如:
TCHAR tStr[12]="abc";
wchar_t wStr[50];

怎样才能把tStr的值赋给wStr?
...全文
264 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Richard2001 2001-09-07
  • 打赏
  • 举报
回复
Sorry,是 WCHAR * wTmp=T2W(S);
Richard2001 2001-09-07
  • 打赏
  • 举报
回复
USES_CONVERSION;
wcscpy(SwitchName,L"");
WCHAR * wTmp=W2T(S);
wcscat(SwitchName,wTmp);//(WCHAR *)S);
wcscat(SwitchName,L"\\CSTSwitch");

搞定!谢谢cgaga(红枫剪影)。

cgaga 2001-08-31
  • 打赏
  • 举报
回复
在这里这样就好了
USES_CONVERSION;
TCHAR tStr[12]="abc";
wchar_t *pwStr=T2OLE(tStr);
//pwStr的内存在栈上分配所以pwStr只在当前函数中有效
cgaga 2001-08-31
  • 打赏
  • 举报
回复
如果有atl支持
可以使用下面的方式来转换
在函数的开头加上USES_CONVERSION;
然后用T2OLE将TCHAR类型的转换成OLECHAR类型的也就是wchar_t类型的
也可以使用OLE2T,T2A,A2T等等,具体察看MSDN
Elminster 2001-08-31
  • 打赏
  • 举报
回复

TCHAR 这个类型,是为了方便同时支持 Unicode 和传统的 ASCII 字符而存在的,事实上,当你的项目使用 Unicode,它就是 wchar_t,否则它就是传统的 char ,详细的描述可以看 MSDN。

所以要做 TCHAR 和 wchar_t 之间的复制,最好是判断一下 _UNICODE 是否被定义,直接使用 strcpy 一类的函数恐怕不太妥当。
Richard2001 2001-08-31
  • 打赏
  • 举报
回复

TCHAR S[100];
wchar_t SwitchName[100];

ZeroMemory(SwitchName,100*sizeof(wchar_t));

CRegKey keyAppID;
LONG lRes = keyAppID.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE"), KEY_READ);
if (lRes != ERROR_SUCCESS)
return lRes;
CRegKey key;
lRes = key.Open(keyAppID, _T("CSTradeExch"), KEY_READ);
if (lRes != ERROR_SUCCESS)
return lRes;
DWORD szKeyLen=MAX_SIZE_NAME;
key.QueryValue(S,_T("SwitchA"),&szKeyLen);
key.Close() ;
keyAppID.Close();

//此时 S 值为:"qab"

wcscpy(SwitchName,L"");
WCHAR * wTmp;
wTmp=(WCHAR * )S;
wcscat(SwitchName,wTmp);//(WCHAR *)S);
wcscat(SwitchName,L"\\CSTSwitch");

//此时SwitchName的值为:"qab\\CSTSwitch",但经查,SwitchName[0] 
内存中的值为30577,而用语句:SwitchName=L"qab\\CSTSwitch"; 得到的SwitchName[0]的值为113.
(TCHAR)SwitchName[0]为113 "q"

怎么回事????





ed9er 2001-08-31
  • 打赏
  • 举报
回复
_tcscpy
Richard2001 2001-08-31
  • 打赏
  • 举报
回复
高手们,请不吝赐教!

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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