0

我正在开发一个带有 ncurses 的小型控制台游戏。在主菜单中,我希望用户能够设置控制键。现在据我了解,在 ncurses 中,您可以通过 char 'a' 的 int 值访问 ea 键。使用带有“a”的关键游戏完美无缺,但是我被菜单卡住了:

对于每个键绑定,我存储了一个默认为 ea 'a' 的 int 值。游戏开始时,我从 int 值中正确读取了“a”绑定,并且可以在游戏中使用它。但是,它不能正确显示。我希望它是这样的:“左:a”。我这样做:

std::string key = "Left: " + static_cast<char>(_value);

_value 是我存储并初始化为“a”的 int 值。顺便说一句,我也试过没有演员表。

现在显示的内容很奇怪。它不是“a”,而是“~T^C”。对于字母“s”和“d”,它根本不显示任何内容。“w”变成了一些很奇怪的编码问号。

我想这与 int-values 中字符的编码有关。那么我该怎么做才能让它以正确的方式显示呢?

非常感谢!

4

1 回答 1

2

您将字符串文字的地址和 ASCII 值加在一起_valuekey然后从该垃圾地址处的任何内容构造字符串。

请记住,字符串字面量是 N 的数组类型,const char当传递给函数和运算符等时,数组会衰减为指向其第一个元素的指针,这会产生const char*. 用于指针的内置 + 运算符不进行字符串连接。您需要std::string从至少一个操作数中构造一个以使重载运算符生效:

std::string key = std::string("Left: ") + static_cast<char>(_value);
于 2012-09-08T08:56:52.690 回答