为什么C++中的消息框显示中文消息

Kin*_*uoc 1 c++ winapi visual-studio-2010

可能重复:
为什么我的简单C++ GUI应用程序显示中文消息框?

我在Visual C++中实现了以下代码块:

int nResult=MessageBox(NULL,
                       (LPCWSTR)"An example of Cancel,Retry,Continue",
                       (LPCWSTR)"Message Box!",
                        MB_ICONWARNING|MB_ABORTRETRYIGNORE);
Run Code Online (Sandbox Code Playgroud)

然而,无论我尝试什么,它总是显示一个中文的消息框!因此,我只是想问一下我的问题的解决方案以及为什么这里有中文信息.谢谢!

Moh*_*han 10

你忘了在字符串文字前放置'L'.修改如下:

int nResult=MessageBox(NULL,
                   L"An example of Cancel,Retry,Continue",
                   L"Message Box!",
                   MB_ICONWARNING|MB_ABORTRETRYIGNORE);
Run Code Online (Sandbox Code Playgroud)

在C++中,unicode字符串文字的前缀是L.如果你没有放置前缀,那么转换为'unicode string constant'将无济于事并导致错误地解释内存位置.


Dav*_*rtz 5

您期望从一种类型到另一种类型的指针转​​换以更改指向的值.这不是C++演员所做的.它们只是告诉编译器假设指针指向新类型.要指定宽文字,请L在引号之前使用(如果编译器支持,则使用新的字符串文字).摆脱演员,它只是掩盖了错误.