c - "Size in TCHARs"是什么意思?

标签 c winapi

LVCOLUMN 的文档中, 它说:

enter image description here

“以 TCHAR 表示的大小”是什么意思?是 sizeof() 还是 strlen()

最佳答案

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

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

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

因此,大小在 TCHAR 中s 与 strlen() 相同(或者有时 strlen()+1 ,检查文档)如果你只使用 8 位,但它是 wcslen() (或 wcslen()+1 )如果您使用的是宽字符 (unicode)。为了服务于他们的“文本统一”项目,Microsoft 推出了 _tcslen()它映射到适当的字符串长度函数。

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

关于c - "Size in TCHARs"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926616/

相关文章:

c - lcc编译器错误

c操作耗时0秒

java - Z3 使用 JNA 引发无效内存访问

c - 可变函数和 va_arg : variabilizing the type to be printed

c++ - 我如何找到标签等于字符串变量的 TreeView 节点?

c - PE部分数据

c++ - 如何使用我自己的坐标而不是 wParam? (使用winapi)

c++ - WIN32 API 项目中的 ReadDirectoryChangesW 错误?

c - 为什么这个 *ptr 不给出存储在 ptr 变量中包含的内存地址处的实际值?

linux - 从 Linux 库源构建 Win32 DLL