如何正确使用WriteConsoleOutputAttribute函数

3

Why does the following code

  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);

导致这种结果的原因是什么?我应该如何解决它?

在此输入图片描述


你想做什么? - David Haim
@David Haim 我想要以绿色打印“str”。 - FrozenHeart
1个回答

7

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

解决方案:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接