префиксы sz и pwsz в WinAPI

Я немного запутался с префиксами венгерской нотации в WinAPI для строк CHAR и WCHAR.
Когда мы используем строку CHAR, обычно используется такой префикс:

CHAR szString[] = "Hello";

У нас есть строка с нулем в конце szString, так что все в порядке.
Но когда мы используем строку WCHAR, обычно используется такой префикс:

WCHAR pwszString[] = L"Hello";

Он обозначает указатель на широкую строку с нулем в конце … но наш тип выглядит не так. Указатель на широкую строку с нулевым символом в конце — WCHAR ** или PWSTR *. Я ошибся?
Почему это sz для строк CHAR и pwsz, а не wsz для строк WCHAR?

8

Решение

Второй пример вводит в заблуждение (хотя и нередко). Это должен быть один из этих двух:

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

Поскольку массив может использоваться в большинстве случаев, когда ожидается указатель, некоторые программисты немного неаккуратны в отношении различия.

Венгерский вне стиля, но это может быть полезно, когда используется хорошо.

8

Другие решения

CHAR szString [] является синонимом CHAR * szString. Оба являются указателями на строки. Указатель на строку с нулевым символом в конце является CHAR *, а указатель на строку с нулевым символом в конце будет WCHAR * (не WCHAR **).

Теперь, если вы хотите стать педантичным, вы можете (ошибочно) заявить, что CHAR [] — это «просто массив символов», и в этом случае «rgc» может быть правильным префиксом.

-2

По вопросам рекламы [email protected]