位置情報で子どもの居場所をお知らせ

たとえば、”垂直タブ” \vで
printf("aaa\vbbb\n")とすると
aaa
***bbb (*は空白とします)
”書式送り” \fで
printf("aaa\fbbb\n")とすると
aaa
***bbb (*は空白とします)と同じ結果になります。
何か、c言語で”垂直タブ”と”書式送り”で違う使い方があるのでしょうか。
宜しくお願いします。
なお、環境としてはRedHat Linux でviを使っています。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

「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だけになったりして今に至っています。
    • good
    • 0
この回答へのお礼

大変詳しいご説明、納得しました。
有難うございました。

お礼日時:2008/05/26 08:46

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q#include というヘッダファイルについて

お早う御座います。
Cの初心者です、宜しくお願いします。
「#include <Windows.h>」というヘッダファイルはどのようなプログラムを書いたときにincludeしてやる必要があるのでしょうか。
宜しくお願いします。

Aベストアンサー

VisualStudioなら、<Windows.h>の部分を右クリックして
「定義ファイルに移動」のような項目で中身を見れたと思います。
そこに定義されている関数や定数を使う場合にincludeしてあげる必要があります。
※Windows.hの中身は弄らないでください

Qプログラムによく出てくるstrの意味

プログラムによく出てくるstrの意味はなんですか?
数学でよくpやrを使いますがそれと同じようなものでしょうか?
例:char str[] = "COMPUTER";

Aベストアンサー

string:文字列


人気Q&Aランキング