【发布时间】:2017-12-13 04:53:20
【问题描述】:
我声明了两个变量:
WCHAR w_ErrorMessage[256];
LPCWSTR lp_ErrMsg;
第一个变量用于返回 SQLite 错误消息,第二个变量用于 MessageBox 文本。我尝试并编写了这段代码:
lp_ErrMsg = L"Database sql error: " + WCHAR(w_ErrorMessage);
MessageBox(0, lp_ErrMsg, L"Error", MB_ICONERROR | MB_OK);
但类似这样的消息显示: ScreenShot
如果我删除 w_ErrorMessage 变量后面的 WCHAR,我会得到“错误:无法添加两个指针”。
我希望 MessageBox 显示错误:SQLite 错误:%TheActualErrorMessage%。 我该怎么做?
【问题讨论】:
-
这是我见过的未定义行为中最漂亮、最令人惊讶的案例。想知道这些汉字是否有意义会很有趣……
-
WCHAR(w_ErrorMessage)将数组w_ErrorMessage(之前可能隐式转换为(WCHAR*))转换为WCHAR。从字面上看,一个指向宽字符的指针。这使编译器保持沉默,但可能不提供预期的内容。顺便说一句:如果您按照答案中的建议使用wcscat(),请不要忘记为目标指针分配足够的内存。