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

C++ 2D小游戏代码跨项目复制后无输出无法运行,是什么原因?

C++ 2D控制台游戏迁移后无输出问题修复方案

以下是代码中存在的核心问题及对应修复方法:

  • 自定义控制台缓冲区未激活
    你调用CreateConsoleScreenBuffer创建了专属的绘图缓冲区,但没有调用SetConsoleActiveScreenBuffer将其设置为系统当前显示的缓冲区。所有绘图内容都写入了后台不可见的缓冲区,是无输出的直接原因。
    修复方式:在创建hConsole的代码后新增一行:
SetConsoleActiveScreenBuffer(hConsole);
  • 数组越界写入触发未定义行为
    你申请的screen数组大小为screenWidth * screenHeight,合法下标范围是0 到 screenWidth*screenHeight - 1,但代码末尾执行了screen[screenWidth * screenHeight] = '\0';,属于越界写内存。这类问题在不同编译环境下表现差异很大,旧项目可能碰巧没有触发崩溃,新项目直接导致程序异常退出。
    修复方式:直接删除这行越界写入的代码即可,WriteConsoleOutputCharacter会按照指定长度输出内容,不需要字符串以\0结尾。

  • 未适配控制台默认尺寸
    代码中设置的屏幕分辨率为240*63,远超Windows控制台默认的窗口和缓冲区尺寸,就算内容输出也会出现乱码、截断等异常。
    修复方式:在设置活跃缓冲区后新增代码适配尺寸:

// 设置控制台缓冲区尺寸
COORD bufferSize = { (SHORT)screenWidth, (SHORT)screenHeight };
SetConsoleScreenBufferSize(hConsole, bufferSize);
// 设置控制台窗口显示尺寸
SMALL_RECT windowSize = { 0, 0, (SHORT)screenWidth - 1, (SHORT)screenHeight - 1 };
SetConsoleWindowInfo(hConsole, TRUE, &windowSize);
  • 缺少API调用校验
    所有Win32 API都存在调用失败的可能,你当前没有对CreateConsoleScreenBuffer等接口的返回值做校验,出现异常时很难定位问题。可自行添加简单的返回值判断,比如创建hConsole后判断是否等于INVALID_HANDLE_VALUE。

完成上述修改后重新编译即可正常运行,可通过WASD或方向键控制角色移动,左上角会显示小地图和当前坐标、FPS信息。

内容的提问来源于stack exchange,提问作者Samuel Nilsson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:15:00