\t
は、キャリッジリターンとタブ文字、\r
(タイプライターを考える)を参照し、非破壊バックスペースに\b
。 crvvが指摘しているように、同じ出力は常にstdout:"\nab\bsi\rha"
に送られます。しかし、あなたの端末とXCodeは異なる出力を(選択によって)生成します。
お使いの端末は、以下を行います:それは\n
を見て、新しい行に行く、それはab
と「店舗」というを見ているが、それは非破壊バックスペースを実行しますので、それは、\b
を見ています。当初
:
ab
^
\b
に遭遇した後:カーソルがあることを
ab
^
注これは、基本的に新しい文字が書かれているポイント別名カーソルを意味し、1つのスペース戻り現在はbの下にあるので、後続の文字があれば上書きされます。
次に、s
に読み込み、i
ので、我々が得る:
asi
^
次に、それは、\r
に読み込みます。これは古いタイプライターが行の先頭にカーソルを戻すカーリッジリターンです。だから今、私たちはしている:
asi
^
最後に、それはha
に読み込み、カーソルがa
の下にあるので、ha
はas
を上書きします:
hai
^
ここでの事です。カーソルがiの下にあるまだであることに注意してください。それは、次の空きスペースの下ではありません。あなたのプログラムprintf
は、printf("\rha")
の後に何も印刷しないので、端末があなたの出力を印刷するとき、カーソルはiの下に留まります。
端末が出力する次のものは何ですか?通常は通常のプロンプトです([email protected]
)。 これはiを上書きするため、[email protected]
のように表示されます。
Xcodeは、それとは少し異なります。したがって、カーソルが戻って文字を行かないようにそれは、\b
を消費し、\r
は改行として扱われます。
absi
ha
プログラムはまったく同じ動作します。端末によって異なる制御文字が解釈されるため、異なる結果が表示されます。正しい質問は、 "どのように' \ r'がCで動作するのか "\ r"がLinux端末でどのように動作するかではありません。 '\ r'を出力するために使用する言語は無関係です。 –
@ n.m。実際にはC標準は '\ r' *がどのように動作すべきかを指定しています。 Xcodeはそれを守っていません。 –
@AnttiHaapala標準では、 '\ r'がディスプレイデバイス上で何を意図しているのかを示しています。 XCodeコンソールウィンドウはディスプレイデバイスですか? 1つを構成するものは何も定義されていないため、意図的なものだけであり、それ以上のものはありません。 –