Этот код должен обновить экран. Пожалуйста, скажите мне, где я ошибаюсь

#c #winapi

Вопрос:

Как я понял, WriteConsole() функция записывает массив символов в буфер экрана. Это работает до тех пор, пока я не попытаюсь сделать цикл.

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

int main() {
    HANDLE hScreenBuffer;

    hScreenBuffer = GetStdHandle(STD_OUTPUT_HANDLE);

    char map[100];
    LPDWORD number_of_chars_to_write;

    for (int i = 0; i < 100; i  ) {
        map[i] = '#';
    }
    while (1) {
        
        WriteConsole(
            hScreenBuffer,
            map,
            100,
            number_of_chars_to_write,
            NULL

        );
    }
}
 

Комментарии:

1. Вызывайте WriteConsoleA вместо WriteConsole .

2. Ничего не изменилось

Ответ №1:

В вашем коде есть две проблемы:

Во-первых, как указано в комментарии, вам нужно использовать WriteConsoleA , так как вы пишете узкие char буквы s.

Во-вторых, вы передаете неинициализированный указатель LPDWORD number_of_chars_to_write; на WriteConsole , что, скорее всего, приведет к сбою.

Это исправленный код:

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

int main() {
    HANDLE hScreenBuffer;

    hScreenBuffer = GetStdHandle(STD_OUTPUT_HANDLE);

    char map[100];
    DWORD number_of_chars_to_write;

    for (int i = 0; i < 100; i  ) {
        map[i] = '#';
    }
    while (1) {
        WriteConsoleA(
            hScreenBuffer,
            map,
            100,
            amp;number_of_chars_to_write,
            NULL
        );
    }
}