如何正确使用WriteConsoleOutputAttribute函数

Fro*_*art 3 c++ winapi

为什么以下代码

  const std::string text = "str";

  HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);

  COORD coords = { 0, 0 };
  DWORD written = 0;
  WriteConsoleOutputCharacterA(stdout_handle, text.c_str(), text.size(), coords, &written);

  WORD attributes = FOREGROUND_GREEN;
  WriteConsoleOutputAttribute(stdout_handle, &attributes, text.size(), coords, &written);
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述

我究竟做错了什么?我该如何解决?

MSa*_*ers 7

&attributes指向长度为1的数组,单个绿色属​​性.但你声称阵列很text.size()长.因此,您将随机堆栈内容复制到下两个单元格.这恰好看起来是红色的.

解:

std::vector<WORD> attributes(text.size(), FOREGROUND_GREEN);
WriteConsoleOutputAttribute(stdout_handle, &attributes[0] ...
Run Code Online (Sandbox Code Playgroud)