You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WriteConsoleOutputCharacter()编译时出现wchar_t*转LPCSTR类型错误求助

WriteConsoleOutputCharacter()编译时出现wchar_t*转LPCSTR类型错误求助

嘿,我刚好碰到过类似的问题,给你几个解决办法试试:

错误原因

你遇到的类型不匹配问题,本质是MinGW默认没有启用Unicode相关宏,导致WriteConsoleOutputCharacter被解析为ANSI版本的WriteConsoleOutputCharacterA——这个函数接受的是const char*(即LPCSTR)类型参数,但你传入的是wchar_t*,自然就触发了编译错误。

解决办法

1. 在代码中定义Unicode宏

在包含<Windows.h>之前,先定义UNICODE和_UNICODE宏,这样系统会自动选用宽字符版本的WriteConsoleOutputCharacterW(它接受const wchar_t*类型,也就是LPCWSTR,刚好匹配你的screen变量):

#define UNICODE
#define _UNICODE
#include <Windows.h>

2. 在编译命令中添加宏定义参数

如果不想修改代码,可以直接在编译选项里加入-DUNICODE -D_UNICODE,修改后的编译参数如下:

"-std=c++20",
"-g",
"-DUNICODE",
"-D_UNICODE",
"${workspaceFolder}/*.cpp",
"-L",
"${workspaceFolder}\\src\\lib",
"-I",
"${workspaceFolder}\\src\\include",
"-l", "mingw32",
"-l", "SDL2main",
"-l", "SDL2",
"-o", "main"

3. 显式调用宽字符版本函数

最直接的方式是跳过宏的自动选择,直接调用宽字符版本的WriteConsoleOutputCharacterW,这样不管有没有定义宏,都能匹配正确的参数类型:

WriteConsoleOutputCharacterW(hConsole, screen, nScreenWidth * nScreenHeight, { 0,0 }, &dwBytesWritten);

小提醒

另外你代码里的循环目前只把screen数组的最后一个字符设为\0,记得在循环内给数组的其他元素填充你想要输出的Unicode字符哦,不然控制台会输出一堆垃圾内容~

备注:内容来源于stack exchange,提问作者Jamba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:08:06