0

ncurses を使った小さなコンソール ゲームに取り組んでいます。メイン メニューで、ユーザーがコントロール キーを設定できるようにします。私が理解している限りでは、ncurses では、char 'a' の int 値によって a-key にアクセスできます。「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値などの文字のエンコーディングと関係があると思います。では、正しい方法で表示するにはどうすればよいでしょうか。

どうもありがとう!

4

1 に答える 1

2

文字列リテラルのアドレスとのASCII値を足し合わせています_valuekey次に、そのゴミアドレスにあるものから文字列が作成されます。

文字列リテラルはN型の配列でありconst char、関数や演算子などに渡されると、配列は最初の要素へのポインタに減衰することに注意してください。これにより、が生成されますconst char*。ポインタ用の組み込みの+演算子は、文字列の連結を行いません。std::stringオーバーロードされた演算子を開始するには、少なくとも1つのオペランドからを作成する必要があります。

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