什么"尺寸在TCHARs"手段?

时间:2015-04-28 17:56:57

标签: c winapi

LVCOLUMN的文档中,它说:

enter image description here

TCHARs中的"大小"手段?是sizeof()还是strlen()

2 个答案:

答案 0 :(得分:5)

所以我们都知道char是8位,wchar_t是16位。 (这并非总是如此,但它是在Windows上使用Microsoft编译器。)

许多(几乎所有)Windows API都在两个版本中实现:一个支持Unicode(多字节字符),另一个支持8位国家字符集。这两个函数的名称实际上略有不同 - 通常8位的名称以“A”结尾,而16位的名称以“W”结尾 - 但您的代码通常也不引用。您的代码调用的函数没有结束字母,并且在<windows.h>中有一个#define,它根据是否定义了UNICODE符号将符号指向适当的函数名称。声明字符串时,可以将它们声明为TCHAR类型 - #define d为charwchar_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试图抽象单宽度和双宽度字符串。 cchcount of characters