OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

空白文字 \f と\v の違いについて

  • すぐに回答を!
  • 質問No.4045792
  • 閲覧数3692
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 20% (33/158)

たとえば、”垂直タブ” \vで
printf("aaa\vbbb\n")とすると
aaa
***bbb (*は空白とします)
”書式送り” \fで
printf("aaa\fbbb\n")とすると
aaa
***bbb (*は空白とします)と同じ結果になります。
何か、c言語で”垂直タブ”と”書式送り”で違う使い方があるのでしょうか。
宜しくお願いします。
なお、環境としてはRedHat Linux でviを使っています。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル11

ベストアンサー率 58% (134/230)

「C言語で」ではなくてシステムあるいは出力装置によって違いがあります。
例えば"\f"で示されるForm Feed制御文字はプリンタなどでページ送りの意味に扱われます。(これもプリンタの機種やプリンタに送られる文脈で解釈が変わることがあるので「必ずそうなる」というものでもないです。)
一方で"\v"で示されるVertical Tab制御文字は今でも使われるHorizontal Tab("\t")の垂直方向版であらかじめ規定されたタブ位置まで印字位置を進めます。

ただ、いずれも今の時代では制御文字として本来の意味を発揮する使い方はほとんどないだろうと思います。Linux、というよりはターミナルエミュレータ(xtermとか)の仕様によりますけれど、画面上ではあまり意味がないので同じ桁位置で次行移動くらいの実装になっているのでしょう。記憶に定かでないのですが一世を風靡したターミナルVT100がそんな仕様だったのかも知れません。なお、FF("\f")はページ送りの意味から転じて画面クリアの動きをするターミナルもあるようです。

違いがありますか、ということについては、\vと\fでは出力される文字コードが違うので出力をファイルに書く(リダイレクトなども含む)なら違いがあります。その制御文字コードをあるデバイス(ターミナルとかプリンタとか)に送ったときに違いが出るかというのはデバイスに依存します。質問のケースだとたまたまそのターミナルでは"\v"でも"\f"でも同じ動きをするので違いがない、ということです。別のデバイスに送れば違いが出る可能性はあります。


余談ですが、Linuxで改行として扱われているLine Feed("\n")やMacで改行として扱われるCarridge Return("\r")も似たような状況、つまりシステムや出力装置によって解釈が異なる状況があります。

もともとはCRは「同じ行の先頭に印字位置(Carridge)を戻す(return)」という意味で、LFは「(桁位置に関係なく)次の行(Line)に送る(Feed)」という意味がありました。これを比較的正確に残しているのはMS Windowsの文字コードの扱い方です。といって、テキストデータを扱うにも、そのプログラムを作るにも改行コードがCRとLFの2バイトになるのは面倒なのでUnixのようにLFだけを使う(LFにCRの動きを含む)ようになったりMacのようにCRだけになったりして今に至っています。
お礼コメント
PHYOPHYO

お礼率 20% (33/158)

大変詳しいご説明、納得しました。
有難うございました。
投稿日時 - 2008-05-26 08:46:55
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ