
./a.out を使用して bash で ac/c++ プログラムを実行するたびに、入力中にバックスペースを指定することはできません。代わりに疑問符の付いた箱を受け取りました。
答え1
これ疑問符付きボックスUnicode 代替文字のように聞こえます。この場合、次のように表示されることがあります。
- 端末はUTF-8エンコーディングを使用します。
- 誰かがUTF-8エンコーディングを使用してマルチバイト文字を入力しました。
- バックスペース(または任意の用語)キーが受信されますが、
- ただ部分役割、つまり最後の役割バイト端末ドライバによって削除され、
- (再)表示を要請した端末には不完全な文字が1つだけあり、
- 代替文字を表示:
iutf8
Linuxカーネルは何年もの間フラグをサポートしてきましたが、これは標準化されておらず、通常他のシステムでは利用できません(OSXにはあります、ちなみに)。さらに(サポートされていても)オフにすることもできます。
追加資料:
すべてのPOSIXシステムttyドライバがサポートしています。「料理」一部の生ライン編集機能を使用できるモードです。文字削除機能(バックスペースを押すと有効になります)がUTF-8で正しく機能するには、0x80-0xBFの範囲の連続バイトを文字としてカウントせず、UTF-8の一部として削除するように指示する必要があります。 8マルチバイトシーケンス。カーネルはlibcロケールメカニズムを認識しないため、UTF-8が使用されていることをttyドライバに通知する別のメカニズムが必要です。 Linux カーネルバージョン 2.6 以降は、構造体
c_iflag
termios のメンバー変数のビット IUTF8 をサポートしています。設定すると、「クッキングされた」モデルラインエディタはUTF-8マルチバイトシーケンスを正しく処理します。このモードはコマンドシェルで設定できます。"stty iutf8"。 Xtermと友達は、UTF-8ロケールで呼び出されると自動的にこのビットを設定する必要があります。
答え2
これは予想される動作です。
このBackspace
キーは削除用ではなくバックスペース用です。
文字を削除するには、DEL
キーを使用してください。