sz和pwsz前缀在WinAPI

sz and pwsz prefixes in WinAPI

本文关键字:WinAPI 前缀 pwsz sz      更新时间:2023-10-16

我现在有点困惑的匈牙利符号前缀在WinAPI中的CHAR字符串和WCHAR字符串。当我们使用CHAR字符串时,通常使用这样的前缀:

CHAR szString[] = "Hello";

我们有一个以零结尾的字符串szString,所以一切都很好。但是当我们使用WCHAR字符串时通常使用这样的前缀:

WCHAR pwszString[] = L"Hello";

表示指向终止于零的宽字符串的指针…但我们的类型不是这样的。指向终止于零的宽字符串的指针是WCHAR**或PWSTR*。我错了吗?为什么CHAR字符串是sz, wwsz而WCHAR字符串不是wsz ?

第二个例子容易引起误解(尽管并不少见)。它应该是以下两个中的一个:

WCHAR wszString[] = L"Hello";
WCHAR *pwszString = L"Hello";

由于数组可以在大多数需要指针的上下文中使用,因此一些程序员对这种区别有点草率。

匈牙利语已经过时了,但如果使用得当,它还是很有用的。

CHAR szString[]是CHAR * szString的同义词。都是指向字符串的指针。指向以零结尾的字符串的指针是CHAR*,指向以零结尾的宽字符串的指针是WCHAR*(而不是WCHAR**)。

现在,如果你想变得迂腐,你可以(错误地)声称CHAR[]"只是一个字符数组",在这种情况下,"rgc"可能是正确的前缀。