首页 > 解决方案 > 控制台属性的 C++ 奇怪行为

问题描述

我首先向您展示代码:

#include <iostream>
#include <Windows.h>

#define att 0x21

int main()
{
    char str[]= "Hello Wolrd";
    WORD attribute[]= { att, att, att, att, att, att, att, att, att, att, att };

    DWORD CharWrited;
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);

    WriteConsoleOutputCharacterA(h, str, sizeof(str) - 1, { 0,0 }, &CharWrited);
    WriteConsoleOutputAttribute(h, attribute, 11, { 0,0 }, &CharWrited);

    getchar();
    return 0;
}

我有以下输出。到目前为止,一切正常,除非我尝试通过删除或添加列来调整控制台的大小,否则会生成2nd_output这条线,它在控制台线3rd_output的末尾结束。我已经通过更换这部分解决了:

char str[]= "Hello Wolrd";

有了这个:

char str[]= "Hello Wolrd\xff";

但我想知道,为什么会这样?有没有更好的方法来解决它?打包后,控制台中会出现一个无法识别的字符。此外,只有在控制台中我激活了“在调整大小时包装文本输出”选项时才会发生这种情况。

标签: c++

解决方案


推荐阅读