为什么以下代码
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);
结果如下:
我做错了什么?我该如何解决?
答案 0 :(得分:7)
&attributes
指向一个长度为1的数组,一个绿色属性。但是你声称数组的长度为text.size()
。因此,您将随机堆栈内容复制到下两个单元格。这恰好看起来是红色的。
解决方案:
std::vector<WORD> attributes(text.size(), FOREGROUND_GREEN);
WriteConsoleOutputAttribute(stdout_handle, &attributes[0] ...