Преобразование QString в PCWSTR в Windows

avatar
Jez
9 августа 2021 в 06:40
130
2
0

Почему работает следующий код из этого ответа:

QString username = "Bond";
std::wstring username = username.toStdWString();
PCWSTR username = username.c_str();

Если не выполняется следующее:

QString username = "Bond";
PCWSTR username = username.toStdWString().c_str();
Источник
V.K. author of HiFile
9 августа 2021 в 12:24
0

Придирка: Ваш код в любом случае не скомпилируется — у вас дублируются имена переменных.

Ответы (2)

avatar
rpress
9 августа 2021 в 06:53
0

Временный объект уничтожается, после этого результат c_str() недействителен.

Jez
9 августа 2021 в 07:16
1

Легенда! Даже после многих лет использования C++ подобные вещи продолжают удивлять.

avatar
V.K. author of HiFile
9 августа 2021 в 12:28
0

Ответ rpress, конечно, правильный. Однако я использую это преобразование:

const QString usernameStr = "Bond";
auto usernameStrPtr = reinterpret_cast<PCWSTR>(usernameStr.utf16());

В большинстве случаев это позволит избежать одного ненужного выделения и преобразования в std:wstring. Я предполагаю, что в любом случае вы ожидаете кодировку UTF16...

Jez
10 августа 2021 в 14:31
0

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