答案 0 :(得分:5)
所以我们都知道char
是8位,wchar_t
是16位。 (这并非总是如此,但它是在Windows上使用Microsoft编译器。)
许多(几乎所有)Windows API都在两个版本中实现:一个支持Unicode(多字节字符),另一个支持8位国家字符集。这两个函数的名称实际上略有不同 - 通常8位的名称以“A”结尾,而16位的名称以“W”结尾 - 但您的代码通常也不引用。您的代码调用的函数没有结束字母,并且在<windows.h>
中有一个#define
,它根据是否定义了UNICODE
符号将符号指向适当的函数名称。声明字符串时,可以将它们声明为TCHAR
类型 - #define
d为char
或wchar_t
,具体取决于符号{UNICODE
1}}是否已定义。
这样做的最初目的是允许开发人员提供两个版本的软件,一个符合unicode标准并调用unicode API,另一个版本不是,只调用8位API,和从相同的源代码构建它们。在一些广泛安装的Windows版本不支持Unicode版本的日子里,这很重要。 [但是,现在几乎整个Windows的安装基础都是符合Unicode的,所以你应该在任何地方使用Unicode版本(宽字符)。]
因此,TCHAR
中的大小与strlen()
相同(或有时strlen()+1
,请检查文档)如果您只使用8位,但它是{{ 1}}(或wcslen()
)如果你使用宽字符(unicode)。为了解决他们的“文本统一”项目,Microsoft引入了wcslen()+1
映射到相应的字符串长度函数。
https://msdn.microsoft.com/en-us/library/vstudio/78zh94ax%28v=vs.110%29.aspx
答案 1 :(得分:0)
由于您使用的是windows api和TCHAR字符串,因此它们都没有。您应该使用_tcslen
来获取字符串的长度。
正如其他人所说,TCHAR试图抽象单宽度和双宽度字符串。 cch
是count of characters
。