"Size in TCHARs" 是什么意思?

What does "Size in TCHARs" means?

LVCOLUMN 的文档中说:

"Size in TCHARs"是什么意思?是 sizeof() 还是 strlen()

所以我们都知道char是8位,wchar_t是16位。 (这并不总是正确的,但在 Windows Microsoft 编译器中是这样。)

许多(几乎所有)Windows API 在后台以两个版本实现:一个支持 Unicode(多字节字符),另一个支持 8 位国家字符集。这两个函数的名称实际上略有不同——通常 8 位函数以 "A" 结尾,16 位函数以 "W" 结尾——但您的代码通常不引用任何一个。您的代码调用的函数没有结尾字母,并且在 <windows.h> 中有一个 #define 将符号指向适当的函数名称,具体取决于是否定义了 UNICODE 符号。当你声明你的字符串时,你可以将它们声明为类型 TCHAR —— 即 #defined 是 charwchar_t 取决于符号是否 UNICODE是否定义。

这样做的最初目的是让开发人员能够提供两种版本的软件,一种是兼容 unicode 并调用 unicode API 的,另一种不是,只是调用 8 位 API, 并从相同的源代码构建它们。 这在某些广泛安装的 Windows 版本不支持 Unicode 版本的时代非常重要。 [但是,现在 Windows 的几乎所有安装基础都与 Unicode 兼容,因此您应该在任何地方都使用 Unicode 版本(宽字符)。]

因此,如果您只使用 8 位,TCHARs 中的大小与 strlen()(或有时 strlen()+1,请查看文档)相同,但它wcslen()(或 wcslen()+1)如果您使用的是宽字符 (unicode)。为了服务于他们的 "text unification" 项目,Microsoft 引入了 _tcslen(),它映射到适当的字符串长度函数。

https://msdn.microsoft.com/en-us/library/vstudio/78zh94ax%28v=vs.110%29.aspx

由于您使用的是 windows api 和 TCHAR 字符串,因此两者都不是。您应该使用 _tcslen 来获取字符串的长度。

正如其他人所说,TCHAR 是对单倍宽和双倍宽字符串的抽象尝试。 cchcount of characters