我在互联网上搜索了大约 2 个小时,但没有找到任何工作解决方案。
我的程序有多字节字符集,在我得到的代码中:
WCHAR value[1];
_tcslen(value);
在编译时,我得到了错误:
“strlen”:无法将参数 1 从“WCHAR [1]”转换为“const char *”
如何将此 WCHAR[1] 转换为 const char * ?
我认为不是很有用的 1 长度WCHAR
数组只是一个例子......
_tcslen
不是函数;它是一个扩展为strlen
或wcslen
根据_UNICODE
定义的宏。如果您使用的是多字节字符集(这意味着_UNICODE
未定义)并且您有一个WCHAR
数组,则必须wcslen
显式使用。
(除非您TCHAR
专门使用,否则您可能希望避免使用 _t 函数。MSDN 中有一个不太好的概述,网址为http://msdn.microsoft.com/en-us/library/szdfzttz(VS.80) .aspx;有人知道更好的吗?)
尝试在 VS 的项目设置中设置“使用 unicode”,如果你想_tcslen
成为,将其设置为wcslen
“使用多字节” 。正如一些人已经指出的那样,前缀函数(实际上还有许多其他函数,例如)是基于预编译器定义值“扩展”的宏。_tcslen
strlen
_t
MessageBox()
_UNICODE
另一种选择是在您的代码中使用TCHAR
而不是。WCHAR
尽管我想说一个更好的主意是坚持使用其中一个wchar_t
或char
类型并使用适当的功能。
最后但并非最不重要的一点是,由于问题标记为 c++,请考虑使用std::string
(或std::wstring
就此而言)而std::vector
不是 char 缓冲区。使用带有 C API 函数的那些是微不足道的,而且通常更安全。
使用转换函数 WideCharToMutliByte() 。
http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx
_tcslen 仅在您的环境中为 #defined UNICODE 时才将 WCHAR 指针或数组作为输入。
从错误消息中,我会说它不是
定义 unicode 的最佳方式是将其作为参数传递给编译器。对于 Microsoft C,您将使用 /D 开关
cl -c /DUNICODE myfile.cpp
或者您可以将您的数组声明更改为 TCHAR,当 UNICODE 不是#defined 和 WCHAR 时,它就像 _tcslen 将是 char。