2009-12-27 64 views
2

我在互联网上搜索了大约2个小时,我找不到任何工作解决方案。_tcslen in Multibyte字符集:如何将WCHAR [1]转换为const char *?

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

WCHAR value[1]; 

_tcslen(value); 

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

'strlen' : cannot convert parameter 1 from 'WCHAR [1]' to 'const char *'

如何转换这种WCHAR [1]为const char * ?

+0

你想做什么? – avakar

回答

4

我假定不是非常有用的1-长度WCHAR阵列仅仅是一个例子...

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

(除非你使用TCHAR具体而言,你可能想避免_t功能有在http://msdn.microsoft.com/en-us/library/szdfzttz(VS.80).aspx在MSDN一个不是非常好的概述;?没有任何人知道的东西更好)

0

_tcslen需要WCHAR指针或数组只在UNICODE在你的环境中被定义时才作为输入。

从错误信息,我会说,这不是

定义统一的最佳方式是把它作为一个参数传递给编译器。对于Microsoft C,你可以使用/ d开关

cl -c /DUNICODE myfile.cpp 

,或者你可以在你的数组声明改为TCHAR,这就像_tcslen将焦炭UNICODE时不#defined定义和WCHAR当它。

3

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

另一种选择是在代码中使用TCHAR而不是WCHAR。虽然我会说一个更好的主意是坚持使用wchar_tchar类型并使用适当的函数。

最后但并非最不重要的,因为这个问题被标记C++,可以考虑使用std::string(或std::wstring为此事)和std::vector代替字符缓冲区。使用那些C API函数是微不足道的,通常更安全。

相关问题