所以我们都知道这char是8位,而且wchar_t是16位.(这并非总是如此,但它在Windows上与Microsoft编译器一起使用.)
许多(几乎所有)Windows API都在两个版本中实现:一个支持Unicode(多字节字符),另一个支持8位国家字符集.这两个函数的名称实际上略有不同 - 通常8位的名称以"A"结尾,而16位的名称以"W"结尾 - 但您的代码通常也不引用.您的代码调用函数没有结局的信,并在<windows.h>有一个#define指向了这取决于是否适当的功能名称符号UNICODE符号定义.声明字符串时,可以将它们声明为类型TCHAR- #defined 取决于是否定义了符号,char或者是d .wchar_tUNICODE
最初的目的是允许开发人员提供他们软件的两个版本,一个是unicode兼容的并调用unicode API,另一个不是,只调用8位API,并从同一个源构建它们码.在一些广泛安装的Windows版本不支持Unicode版本的日子里,这很重要.[但是,现在几乎整个Windows的安装基础都是符合Unicode的,所以你应该在任何地方使用Unicode版本(宽字符).
因此,如果您只使用8位,则TCHARs中的大小与strlen()(或有时strlen()+1检查文档)相同,但如果您使用宽字符(unicode)则为wcslen()(或wcslen()+1).为他们的"文本统一"项目服务,Microsoft引入_tcslen()了映射到适当的字符串长度函数.
https://msdn.microsoft.com/en-us/library/vstudio/78zh94ax%28v=vs.110%29.aspx