每当这部分代码运行时,我都会遇到运行时错误:
void PrintChar(int x, int y, char ch, Colors color) {
COORD c = {y,x};
FillConsoleOutputCharacterW(GameData::handle, ch, 1, c, NULL);
FillConsoleOutputAttribute(GameData::handle, color, 1, c, NULL);
}
错误是它正在覆盖位置 0x00000000
有人可以解释为什么会出现这个错误吗?
游戏数据类 -
class GameData {
public:
static CRITICAL_SECTION cs;
static void * handle;
static GameStates gameState;
static int speed;
static int level;
static int points;
static int nextShape;
static int nextTurnShape;
};
颜色 -
enum Colors {
Black, DarkBlue, Green, Blue, Red, Purple, Yellow, While, Gray,
LightDarkBlue, LightGreen, LightBlue, LightRed, LightPurple, LightYellow, BrightWhile
};
附言
如果我需要提供更多代码来阐明正在发生的事情,请告诉我。
最佳答案
如果您查看该 API 的文档:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682663(v=vs.85).aspx
您应该传递一个 DWORD 变量的地址,该变量接收实际写入控制台屏幕缓冲区的字符数
void PrintChar(int x, int y, char ch, Colors color)
{
DWORD dwNumOfCharsWritten;
COORD c = {static_cast<short>(y), static_cast<short>(x)};
FillConsoleOutputCharacterW(GameData::handle, ch, 1, c, &dwNumOfCharsWritten);
FillConsoleOutputAttribute(GameData::handle, color, 1, c, &dwNumOfCharsWritten);
}
关于c++ - FillConsoleOutputCharacterW() C++ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39653789/