gpt4 book ai didi

c++ - Win32 API : GetLastError() with FormatMessage() prints a junk

转载 作者:行者123 更新时间:2023-12-02 03:24:51 34 4
gpt4 key购买 nike

我只是想用这个简单的代码获取最后一个错误的文本:

#include <cstdio>
#include <string>
#include <windows.h>

int main(){
char err[256];
memset(err, 0, 256);
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err, 255, NULL);
wprintf(L"%s\n", err); // just for the safe case
puts(err);
return 0;
}

FormatMessage() 可能会尝试编写类似 No error 的内容,但我得到的是: ┬√яюыэхэю єёях°эю in WINE,以及 VirtualBoxWinXP 下的 ╬яхЁрЎш  єёях°эю чртхЁ°хэр

我检查了我的每一个想法:1) in an example ,由于某种原因,使用了 wchar_t ,因此我尝试创建一个 wchar_t 缓冲区,并将其转换为 FormatMessage (否则构建失败,cannot conversion 'wchar_t*' to 'LPSTR {aka char*}' for argument '5'),2) 然后我想,也许编码与 GNU/不同Linux的,所以我把WinXP安装到VirtualBox中;但是两个函数都没有提供任何可读的内容,应用程序一直在咕哝着自己奇怪的语言。

操作系统:Ubuntu(WINE)、WinXP(VirtualBox)。编译器:MinGW GCC

UPD:我找到了一个有效的代码!

#include <cstdio>
#include <string>
#include <windows.h>

int main(){
wchar_t err[256];
memset(err, 0, 256);
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err, 255, NULL);
int msgboxID = MessageBoxW( NULL,
err,
(LPCWSTR)L"☠",
MB_OK );
return 0;
}

使用-mwindows标志编译后,它会在Ubuntu和WinXP中显示一个带有可读文本的消息框。因此,问题看起来仅限于终端。

最佳答案

您的终端设置为错误的代码页,代码页 866 中的序列 ┬√яюыэхэю 是代码页 1251 中的 Выполнено (即原始字节 c2 fb ef ee eb ed e5 ed ee) ,通过调用更改您的终端代码页

chcp 1251

在运行应用程序并重试之前。

至于为什么你的终端代码页与你的系统代码页不匹配是任何人的猜测,请尝试通过删除 HKCU\Console 注册表项来重置本地用户的 cmd.exe 设置(首先进行注册表备份以防万一) .

关于c++ - Win32 API : GetLastError() with FormatMessage() prints a junk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281819/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com