我正在使用ncurses进行一个小型控制台游戏。在主菜单中,我希望用户能够设置控制键。据我所知,在ncurses中你可以访问e.a. a-key由char'a'的int值。使用带有'a'的关键游戏可以完美地工作,但是我坚持使用菜单:
对于每个键绑定,我存储了一个默认为e.a的int值。 '一个'。当游戏开始时,我从int值正确读取'a'绑定并且可以使用它来进行游戏。但是,它无法正确显示。我希望它是这样的:“左:一个”。我是这样做的:
std::string key = "Left: " + static_cast<char>(_value);
_value是我存储的int值,并初始化为'a'。我也尝试了没有演员,顺便说一句。
现在显示的内容很奇怪。而不是“a”它说“~T ^ C”。对于字母“s”和“d”,它根本不显示任何内容。 “w”成为一些非常奇怪的编码问号。
我想这与int-values中的字符编码有关。那么我该怎样做才能让它以正确的方式显示呢?
非常感谢!
答案 0 :(得分:2)
您正在将字符串文字的地址和_value
的ASCII值相加。然后根据该垃圾地址发生的任何事情构造字符串key
。
请记住,字符串文字是N const char
的数组类型,并且当传递给函数和运算符等时,数组会衰减指向它们的第一个元素,从而产生const char*
。指针的内置+运算符不进行字符串连接。您需要从至少一个操作数构造一个std::string
,以便重载运算符启动:
std::string key = std::string("Left: ") + static_cast<char>(_value);