current_color = -6ren">
gpt4 book ai didi

c++ - "cast with the appropriate bitmask"使用替代 cout

转载 作者:行者123 更新时间:2023-11-28 01:57:24 24 4
gpt4 key购买 nike

所以我决定创建一个控制台类来替代 std::cout << stream << std::endl常规。这是我的代码:

class Console {
public:
Console() {
this->console = GetStdHandle(STD_OUTPUT_HANDLE);
this->current_color = 7;
}
void color(int k) {
this->current_color = k;
SetConsoleTextAttribute(this->console, this->current_color);
}
void remove() {
FreeConsole();
}
void print(std::string s) {
std::cout << s;
}
void log(std::string s) {
this->color(7);
std::cout << s << std::endl;
this->color(this->current_color);
}
void error(std::string s) {
this->color(12);
std::cout << s << std::endl;
this->color(this->current_color);
}
private:
HANDLE console;
int current_color;
};

将控制台初始化为 Console console; , 我用 console.log("String " + n) ,例如,其中 n 是一个无符号短整数。代码编译得很好,但是这个东西出现了: enter image description here它是什么以及如何修复它?

最佳答案

您的程序包含未定义的行为。

console.log("String " + n) (其中 n 是整型)解释如下:

const char* tmp_ptr1 = "String ";
const char* tmp_ptr2 = tmp_ptr1 + n;
console.log(std::string(tmp_ptr2));

如果n > 7n < 0上面的代码执行越界访问。在您的情况下,此访问恰好从链接到程序数据部分的字符串文字中获取一些其他(子)字符串,并且您会在屏幕上看到它。理论上任何其他事情都可能发生。

关于c++ - "cast with the appropriate bitmask"使用替代 cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40692845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com