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

C++调用WriteConsole实现屏幕刷新功能异常,求代码错误排查

错误原因

  • 核心错误:LPDWORD number_of_chars_to_write 是未初始化的野指针。WriteConsole 第四个参数需要传入一个指向有效DWORD变量的地址,用于存储实际写入的字符数。你直接传入未初始化的指针,会导致函数尝试向非法内存地址写入数据,触发未定义行为,这是代码运行异常的最主要原因。
  • 逻辑错误:你要实现屏幕刷新效果,当前逻辑只会不断在控制台末尾追加#字符,并不会覆盖原有内容。需要在每次写入前将控制台光标移动到缓冲区起始位置,才能实现刷新覆盖的效果。
  • 优化建议:死循环中无限制高频调用WriteConsole会导致控制台占用资源过高,建议添加适当延时避免程序卡顿。

修正后的代码

#include <iostream>
#include <Windows.h>

int main() {
    HANDLE hScreenBuffer = GetStdHandle(STD_OUTPUT_HANDLE);
    // 初始化光标坐标为左上角(0,0)
    COORD startPos = {0, 0};
    char map[100];
    // 定义DWORD变量,把它的地址传给WriteConsole
    DWORD numberOfCharsWritten;

    for (int i = 0; i < 100; i++) {
        map[i] = '#';
    }
    while (1) {
        // 每次写入前先把光标移到起始位置,实现覆盖刷新
        SetConsoleCursorPosition(hScreenBuffer, startPos);
        WriteConsole(
            hScreenBuffer,
            map,
            100,
            &numberOfCharsWritten, // 传入有效变量的地址
            NULL
        );
        // 加16ms延时,约60帧刷新率,可按需调整
        Sleep(16);
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:36:06