回答:
結果は、使用しているターミナルまたはコンソールプログラムの種類によって異なりますが、ほとんどの\b
場合、非破壊的なバックスペースです。カーソルを後方に移動しますが、そこにあるものは消去しません。
したがって、hello worl
パーツのコード出力は
こんにちは世界 ^
...(どこに^
カーソルがあるかを示します)次に、(端末上で)消去せずに\b
カーソルを2つ後ろに移動する2つの文字を出力します。
こんにちは世界 ^
カーソルがにあることに注意してくださいr
。次に、が出力されd
、が上書きされて、次のようにr
なります。
こんにちは ^
最後に、\n
非破壊的な改行であるを出力します(これも、ほとんどの端末で、明らかにあなたのものを含みます)。そのため、l
は変更されず、カーソルは次の行の先頭に移動します。
r
はに置き換えられd
ます。説明はまだ当てはまります。
cmd.exe
およびcommand.com
ターミナルは常に挿入するわけではありません(Insキーを使用して動作を切り替えることができます)。私のメインの* nixコンピューターのGnomeターミナルは常に挿入され、Insキーに基づくトグルがはるかに少ないことを優先するようにも見えないことに驚きました。以前はそれに気づかなかった。明らかに私はタイプオーバーをほとんど望んでいません。:-)
.......... ^ <=「印字ヘッド」へのポインタ
/* part1 */
printf("hello worl");
こんにちは世界 ^ <=「印字ヘッド」へのポインタ
/* part2 */
printf("\b");
こんにちは世界 ^ <=「印字ヘッド」へのポインタ
/* part3 */
printf("\b");
こんにちは世界 ^ <=「印字ヘッド」へのポインタ
/* part4 */
printf("d\n");
こんにちは ^ <=次の行の「印字ヘッド」へのポインタ
'\n'
画面に表示がないことです。すでにあるものは同じままです。スペースやその他の文字表現で置き換えられません。
説明するのはそれほど難しくありません...これは、を入力しhello worl
、左矢印キーを2回押し、入力しd
、下矢印キーを押すのと同じです。
少なくとも、それが私があなたの端末が\b
と\n
コードを干渉していると私が推測する方法です。
出力をファイルにリダイレクトすると、完全に別のものが得られます。ただし、違いを確認するためにファイルのバイトを確認する必要がある場合があります。
[編集]
少し詳しく説明すると、これprintf
は一連のバイトを出力します。hello worl^H^Hd^J
は、^H
ASCII文字#8と^J
ASCII文字#10です。画面に表示される内容は、端末がこれらの制御コードをどのように解釈するかによって異なります。