2

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

我的程序有多字节字符集,在我得到的代码中:

 WCHAR value[1];

 _tcslen(value);

在编译时,我得到了错误:

“strlen”:无法将参数 1 从“WCHAR [1]”转换为“const char *”

如何将此 WCHAR[1] 转换为 const char * ?

4

4 回答 4

4

我认为不是很有用的 1 长度WCHAR数组只是一个例子......

_tcslen不是函数;它是一个扩展为strlenwcslen根据_UNICODE定义的宏。如果您使用的是多字节字符集(这意味着_UNICODE未定义)并且您有一个WCHAR数组,则必须wcslen显式使用。

(除非您TCHAR专门使用,否则您可能希望避免使用 _t 函数。MSDN 中有一个不太好的概述,网址为http://msdn.microsoft.com/en-us/library/szdfzttz(VS.80) .aspx;有人知道更好的吗?)

于 2009-12-27T19:02:25.733 回答
3

尝试在 VS 的项目设置中设置“使用 unicode”,如果你想_tcslen成为,将其设置为wcslen“使用多字节” 。正如一些人已经指出的那样,前缀函数(实际上还有许多其他函数,例如)是基于预编译器定义值“扩展”的宏。_tcslenstrlen_tMessageBox()_UNICODE

另一种选择是在您的代码中使用TCHAR而不是。WCHAR尽管我想说一个更好的主意是坚持使用其中一个wchar_tchar类型并使用适当的功能。

最后但并非最不重要的一点是,由于问题标记为 c++,请考虑使用std::string(或std::wstring就此而言)而std::vector不是 char 缓冲区。使用带有 C API 函数的那些是微不足道的,而且通常更安全。

于 2009-12-27T20:44:39.020 回答
1

使用转换函数 WideCharToMutliByte() 。

http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx

于 2009-12-27T19:00:45.143 回答
0

_tcslen 仅在您的环境中为 #defined UNICODE 时才将 WCHAR 指针或数组作为输入。

从错误消息中,我会说它不是

定义 unicode 的最佳方式是将其作为参数传递给编译器。对于 Microsoft C,您将使用 /D 开关

cl -c /DUNICODE myfile.cpp

或者您可以将您的数组声明更改为 TCHAR,当 UNICODE 不是#defined 和 WCHAR 时,它就像 _tcslen 将是 char。

于 2009-12-27T19:19:54.733 回答