C++ 将字符串转换为cpp中的_T

C++ 将字符串转换为cpp中的_T,c++,windows,C++,Windows,我想将string或char*转换为\u T,但无法执行此操作 如果我写 _tcscpy(cmdline,_T ("hello world")); char* msg="hello world"; _tcscpy(cmdline,_T (msg)); 它工作得很好,但如果我写 _tcscpy(cmdline,_T ("hello world")); char* msg="hello world"; _tcscpy(cmdline,_T (msg)); 它显示一个错误,如:error

我想将
string
char*
转换为
\u T
,但无法执行此操作

如果我写

_tcscpy(cmdline,_T ("hello world")); 
char* msg="hello world";
_tcscpy(cmdline,_T (msg));
它工作得很好,但如果我写

_tcscpy(cmdline,_T ("hello world")); 
char* msg="hello world";
_tcscpy(cmdline,_T (msg));
它显示一个错误,如:
error C2065:'Lmsg':未声明的标识符

请给我一个解决办法


Thanx提前。

\u T
仅适用于字符串文本。如果代码是使用Unicode支持编译的,那么它所做的就是将文本转换为
L”“
字符串,否则就不使用它

查看一下您需要使用的函数


您还应该查看。

\u T
是一个宏,定义为(如果定义了
UNICODE
):

它只能用于字符串文本。因此,当您编写
\u T(“hi”)
时,它会变成
L“hi”
,这是有效的,正如预期的那样。但是,当您编写
\u T(msg)
时,它会变成
Lmsg
,这是一个未定义的标识符,而您并不是有意这样做的

您所需要的只是以下功能:


\u T
是一个宏,它通过在
UNICODE
中的文本前加一个
L
,将字符串文本转换为宽字符字符串文本

换句话说,当您编写
\T(“Hello”)
时,就好像您在ANSI版本上编写了
“Hello”
,或者在UNICODE版本上编写了
L“Hello”
。结果表达式的类型分别为
char*
wchar\u t*

\T
无法将字符串变量(
std::string
char*
)转换为
wchar\T*
——为此,必须使用类似或的函数


建议:总是进行UNICODE构建,忘记
\u T
TCHAR
和所有其他
T
-衍生产品,对您来说会容易得多(而且绝不会更糟)。只要到处使用宽字符串。

\u T
不是实际类型。它是一个宏,在字符串文本前面加上
L
,使它们成为
wchar\u t*
s,而不是
char*
。例如,如果需要在运行时将
char*
字符串转换为
wchar\u t*
字符串,则需要使用

修饰符只是一个声明,告诉编译器必须将字符串文本解释为utf-16编码。它对变量不起作用的原因是该变量的内容已经声明为ascii


如前所述,该函数是将字符数据转换为utf-16(宽字符)数据所需的函数。

使用const
char*msg
;字符串文字是只读的。或者使用
const wchar\u t*msg=L“hello world”问题消失了+1为Bo Persson的解决方案。只需使用100%Unicode即可。它支持所有语言,包括英语。英语版本使用ASCII,其他版本使用Unicode,节省了1字节,这真的不值得你这么头疼。+1,这些函数不推荐使用。而是使用这个链接:是的,当然。但那会把手术弄糊涂的。我尽量保持简单。