最佳答案
所以我们都知道 char
是 8 位,wchar_t
是 16 位的。 (这并不总是正确的,但在带有 Microsoft 编译器的 Windows 上是这样。)
许多(几乎所有)Windows API 都是在两个版本的底层实现的:一个支持 Unicode(多字节字符),另一个支持 8 位国家字符集。这两个函数的名称实际上略有不同——通常 8 位函数以“A”结尾,16 位函数以“W”结尾——但您的代码通常不引用任何一个。您的代码调用的函数没有结尾字母,并且在 <windows.h>
中有一个#define
它根据 UNICODE
是否将符号指向适当的函数名称符号被定义。声明字符串时,可以将它们声明为类型 TCHAR
-- 这是 #define
d 是 char
或 wchar_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/