9

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

CHAR szString[] = "Hello";

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

WCHAR pwszString[] = L"Hello";

它代表指向以零结尾的宽字符串的指针......但我们的类型看起来不像这样。指向以零结尾的宽字符串的指针是 WCHAR** 或 PWSTR*。我错了吗?为什么 sz 用于 CHAR 字符串而 pwsz 而不是 wsz 用于 WCHAR 字符串?

4

2 回答 2

8

第二个例子具有误导性(尽管并不少见)。它应该是以下两者之一:

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

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

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

于 2013-04-15T18:31:09.000 回答
-2

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

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

于 2013-04-15T14:35:26.573 回答