C++ _多字节字符集中的tcslen:如何将WCHAR[1]转换为const char*?
我在网上搜索了大约2个小时,但没有找到任何工作解决方案 我的程序有多字节字符集,代码如下:C++ _多字节字符集中的tcslen:如何将WCHAR[1]转换为const char*?,c++,multibyte,C++,Multibyte,我在网上搜索了大约2个小时,但没有找到任何工作解决方案 我的程序有多字节字符集,代码如下: WCHAR value[1]; _tcslen(value); 在编译过程中,我遇到了一个错误: “strlen”:无法转换参数1 从“WCHAR[1]”到“const char*” 如何将此WCHAR[1]转换为常量char*?使用转换函数WideCharToMutliByte() 我假设不太有用的1-lengthWCHAR数组只是一个示例 \u tcslen不是一个函数;它是一个宏,可根据\u
WCHAR value[1];
_tcslen(value);
在编译过程中,我遇到了一个错误:
“strlen”:无法转换参数1
从“WCHAR[1]”到“const char*”
如何将此WCHAR[1]转换为常量char*?使用转换函数WideCharToMutliByte()
我假设不太有用的1-length
WCHAR
数组只是一个示例
\u tcslen
不是一个函数;它是一个宏,可根据\u UNICODE
定义扩展到strlen
或wcslen
。如果您使用的是多字节字符集(这意味着未定义UNICODE),并且您有一个WCHAR
数组,则必须显式使用wcslen
(除非您特别使用
TCHAR
,否则您可能希望避免使用"t"函数。在MSDN at中没有很好的概述;有人知道更好的吗?\u tcslen仅在您的环境中定义UNICODE时才将WCHAR指针或数组作为输入
从错误消息中,我可以说它不是
定义unicode的最佳方法是将其作为参数传递给编译器。对于Microsoft C,您将使用/D开关
cl -c /DUNICODE myfile.cpp
或者,您可以将数组声明更改为TCHAR,例如,未定义UNICODE时,tcslen为char,未定义UNICODE时,WCHAR为WCHAR。尝试在VS中的项目设置中设置“使用UNICODE”。如果希望\u tcslen
为wcslen
,请将tcslen
设置为“使用多字节”。正如一些人已经指出的那样,\u t
前缀函数(实际上还有许多其他函数,例如MessageBox()
)是基于\u UNICODE
预编译器定义值“扩展”的宏
另一种选择是在代码中使用TCHAR
而不是WCHAR
。尽管我认为更好的办法是坚持使用wchar\u t
或char
类型,并使用适当的函数
<>和最后但并非最不重要的一点,因为问题是标记C++,考虑使用<代码> STD::String < /Cube >(或<代码> STD::WString 对于这一点)和