如何正确使用WriteConsoleOutputAttribute函数

时间:2015-07-23 12:45:14

标签: 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);

结果如下:

enter image description here

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

1 个答案:

答案 0 :(得分:7)

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

解决方案:

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