Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ _多字节字符集中的tcslen:如何将WCHAR[1]转换为const char*?_C++_Multibyte - Fatal编程技术网

C++ _多字节字符集中的tcslen:如何将WCHAR[1]转换为const char*?

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

我在网上搜索了大约2个小时,但没有找到任何工作解决方案

我的程序有多字节字符集,代码如下:

 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 对于这一点)和 STD::vector < /COD>而不是字符缓冲区。使用带有C API函数的函数非常简单,而且通常安全得多