日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:入出力について
第 3 章:文字/文字列/引数リスト関数
第 4 章:エラー処理とシグナル処理
第 5 章:サブプロセス関数
第 6 章:Curses画面管理関数とマクロ
第 7 章:算術関数
第 8 章:メモリ割り当て関数
第 9 章:システム関数
第 10 章:国際化ソフトウェアの開発
第 11 章:日付/時刻関数
第 12 章:シンボリックリンクとPOSIXパス名
付録 A:各OSバージョンでサポートする関数一覧
付録 B:非標準ヘッダに複製されているプロトタイプ
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (上巻)


目次 索引



複数の標準 I/O 関数 (端末 I/O 関数を含む) では, I/O のデータの書式を指定するために変換指定が使用されます。これらの関数は,書式設定された入力関数と書式設定された出力関数です。次の例について考えてみましょう。

int     x = 5.0; 
FILE    *outfile; 
   .
   .
   .
fprintf(outfile, "The answer is %d.\n", x); 

識別子 outfile に関連付けられたファイルに書き込まれる文字列内の変換指定 %dは,変数 xの 10 進数に置き換えられます。

各変換指定はパーセント記号 (%) から始まり, 変換指定子で終了します。これは,実行する変換の種類を指定する文字です。パーセント記号と変換指定子の間に,必要に応じて任意の文字を指定することができます。

ワイド文字で書式設定された I/O 関数の場合,変換指定はワイド文字の文字列です。対応するバイト I/O 関数では,変換指定はバイト列です。

これらの任意に指定できる文字と変換指定子については, 2.4.1 項と 2.4.2 項を参照してください。

2.4.1 入力情報の変換

情報を入力する場合の書式指定文字列には,次の 3 種類の項目を含むことができます。

  • 空白文字 ( スペース,タブ,改行文字 )。入力フィールドの省略可能な空白文字に対応します。

  • 一般の文字 (% 以外)。入力の中で次の空白以外の文字に対応しなければなりません。

  • 変換指定。入力フィールドの文字の変換を管理し,対応する入力ポインタによって示されるオブジェクトへの代入も管理します。

各入力ポインタは,対応する変換指定と同じ型のオブジェクトを示すアドレス式です。変換指定は書式指定文字列の一部になります。示されるオブジェクトは,入力値を受け取るターゲットです。変換指定と同じ数だけ入力ポインタが必要であり,アドレスが指定されるオブジェクトは変換指定と同じ型でなければなりません。

変換指定は次の文字で構成され,順序はここに示したとおりになります。

  • パーセント記号 (%) または %n$ というシーケンス (n は整数)。
    %n$ というシーケンスは,変換が n 番目の入力ポインタに適用されることを示します。ただし,n は [1, NL_ARGMAX] の範囲の 10 進整数です ( <limits.h>ヘッダ・ファイルを参照)。たとえば,%5$ から始まる変換指定は,変換が書式指定の後の 5 番目の入力ポインタに適用されることを示します。 %$ というシーケンスは無効です。
    変換指定の先頭に %n$ というシーケンスが指定されていない場合は,変換指定は左から右に順に入力ポインタに対応付けられます。書式指定では,変換指定を 1 種類だけ (% または %n$) 使用するようにしなければなりません。

  • 1 文字以上の省略可能な文字 ( 表 2-2 を参照)。

  • 変換指定子 ( 表 2-3 を参照)。

表 2-2 は,パーセント記号 (%) ( または %n$ というシーケンス ) と変換指定子の間に指定できる文字を示しています。これらの文字は省略可能ですが,指定する場合は, 表 2-2 に示した順に指定する必要があります。

表 2-2 % (または% n$) と入力変換指定子の間に指定できる省略可能な文字
文字 意味
* 代入禁止文字
フィールド幅 0 以外の 10 進整数であり,最大フィールド幅を指定する。

ワイド文字入力関数の場合は,フィールド幅はワイド文字の文字数で表現される。

バイト入力関数の場合は,ディレクティブが次のいずれかである場合を除き,フィールド幅はバイト数で表現される。

%lc, %ls, %C, %S, %[

これらの場合,フィールド幅はマルチバイト文字単位で表現される。

/L_DOUBLE=64 でコンパイルしたプログラムの場合(デフォルトの /L_DOUBLE=128 ではなくて),最大フィールド幅は 1024。

h,l,
L (または ll)
変換指定子 d,i,n のいずれかの前に指定する。対応する引数が int を指すポインタではなく, short int を指すポインタの場合は,h を指定する。 long int を指すポインタの場合は,l ( 小文字のエル ) を指定する。 OpenVMS Alpha システムの場合のみ, __int64 を指すポインタの場合は, L または ll (2 つの小文字のエル ) を指定する。

変換指定子 o,u,または x の前に指定する。対応する引数が unsigned int を指すポインタではなく, unsigned short int を指すポインタの場合は,h を指定する。 unsigned long int を指すポインタの場合は,l を指定する。 OpenVMS Alpha システムの場合のみ, unsigned __int64 を指すポインタの場合は, L または ll を指定する。

変換指定子 c,s,[ の前に指定する。対応する引数が wchar_t を指すポインタの場合は, l ( 小文字のエル ) を指定する。

最後に,変換指定子 e,f,g の前に指定する。対応する引数が float を指すポインタではなく, double を指すポインタの場合は,l ( 小文字のエル ) を指定する。 long double を指すポインタの場合は L を指定する。

h,l,L,ll のいずれかが他の変換指定子とともに指定されている場合は,その動作は未定義になる。

表 2-3 は,書式設定された入力の変換指定子を示しています。

表 2-3 書式設定された入力の変換指定子
指定子 入力の種類1 説明
d   base 引数の値を 10 に設定した strtol 関数のサブジェクト・シーケンスに対して期待される書式と同じ書式の 10 進整数が入力に期待される。対応する引数は int を指すポインタでなければならない。
i   入力文字の先頭文字によって型が決定される整数が期待される。先頭が 0 の場合は 8 進数,先頭が 0X または 0x の場合は 16 進数,他のすべての形式の場合は 10 進数であると解釈される。対応する引数は int を指すポインタでなければならない。
o   入力に 8 進整数 (先頭の 0 はあってもなくてもかまわない) が期待される。対応する引数は int を指すポインタでなければならない。
u   base 引数の値が 10 の strtoul 関数のサブジェクト・シーケンスに対して期待される書式と同じ書式の 10 進整数が入力に期待される。
x   入力に 16 進整数 (先頭の 0x はあってもなくてもかまわない) が期待される。対応する引数は unsigned int を指すポインタでなければならない。
c バイト 入力に 1 バイトが期待される。対応する引数は char を指すポインタでなければならない。

c 変換指定子の前にフィールド幅が指定されている場合は,フィールド幅によって指定される文字数が読み込まれる。この場合,対応する引数は char 型の配列を指すポインタでなければならない。

この変換指定子の前に省略可能な文字 l (小文字のエル) が指定されている場合は,ワイド文字コードに変換されるマルチバイト文字が入力に期待される。

対応する引数は wchar_t 型を指すポインタでなければならない。 c 変換指定子の前にフィールド幅も指定されている場合は,フィールド幅によって指定された文字数が読み込まれる。この場合,対応する引数は wchar_t の配列を指すポインタでなければならない。

  ワイド文字 省略可能なフィールド幅に指定された文字数が期待される。指定されていない場合は 1 になる。

c 指定子の前に l (小文字のエル) が指定されていない場合は,対応する引数は char の配列を指すポインタでなければならない。

c 指定子の前に l (小文字のエル) が指定されている場合は,対応する引数は wchar_t の配列を指すポインタでなければならない。

C バイト ワイド文字コードに変換されるマルチバイト文字が入力に期待される。対応する引数は wchar_t 型を指すポインタでなければならない。

C 変換指定子の前にフィールド幅も指定されている場合は,フィールド幅によって指定される文字数が読み込まれる。その場合,対応する引数は wchar_t の配列を指すポインタでなければならない。

  ワイド文字 省略可能なフィールド幅に指定された文字数のシーケンスが期待される。指定されていない場合は 1 になる。対応する引数は wchar_t の配列を指すポインタでなければならない。
s バイト 入力にバイト・シーケンスが期待される。対応する引数は,バイト・シーケンスと,自動的に付加されるヌル区切り文字 (\0) を格納できるだけの十分な大きさの文字配列を指すポインタでなければならない。入力フィールドはスペース,タブ,改行文字で区切られる。

この変換指定子の前に省略可能な文字 l (小文字のエル) が指定されている場合は,ワイド文字コードに変換されるマルチバイト文字シーケンスが入力に期待される。対応する引数は,文字シーケンスの他に,自動的に付加される区切り文字のヌル・ワイド文字コードを格納できるだけの十分な大きさのワイド文字 ( wchar_t 型) の配列を指すポインタでなければならない。入力フィールドはスペース,タブ,改行文字で区切られる。

  ワイド文字 入力に空白文字以外の文字シーケンスが期待される (概念上)。

s 指定子の前に l (小文字のエル) が指定されていない場合は,対応する引数は,シーケンスの他に,自動的に末尾に付加されるヌル・バイトを格納できるだけの十分な大きさの char の配列を指すポインタでなければならない。

s 指定子の前に l (小文字のエル) が指定されている場合は,対応する引数はシーケンスの他に,自動的に末尾に付加されるヌル・ワイド文字を格納できるだけの十分な大きさの wchar_t の配列を指すポインタでなければならない。

S バイト ワイド文字コードに変換されるマルチバイト文字シーケンスが入力に期待される。対応する引数は,シーケンスの他に,自動的に末尾に付加されるヌル・ワイド文字コードを格納できるだけの十分な大きさのワイド文字 ( wchar_t 型) の配列を指すポインタでなければならない。
  ワイド文字 空白文字以外の文字シーケンスが入力に期待される。対応する引数は,シーケンスの他に,自動的に末尾に付加されるヌル・ワイド文字を格納できるだけの十分な大きさの wchar_t の配列を指すポインタでなければらない。
e,f,g   入力に浮動小数点数値が期待される。対応する引数は, float を指すポインタでなければならない。浮動小数点数値の入力形式は次のとおりである。 [±]nnn[radix][ddd][{E|e}[±]nn]. n と d は 10 進数である (フィールド幅によって示される桁数から符号と英字の E を差し引いた桁数)。基数を示す文字は現在のロケールで定義される。
[...]   空白文字によって区切られていない空でない文字シーケンスが期待される。角括弧は,入力シーケンスに期待される文字セット ( scanset) を囲む。入力シーケンス内の文字のうち,scanset に含まれる文字に対応しない文字が検出されると,文字シーケンスは終了する。

角括弧で囲まれたすべての文字で scanset が構成される。ただし,左角括弧の直後の文字がサーカンフレックス (^) の場合は例外である。この場合は,scanset に含まれる文字は,サーカンフレックスと右角括弧で囲まれる文字以外のすべての文字になる。サーカンフレックスと右角括弧で 囲まれた文字が検出されると,入力文字シーケンスは終了する。

変換指定子が [] または [^] で始まる場合は,右角括弧文字は scanset に含まれ,次の右角括弧文字が指定を終了する右角括弧文字になる。それ以外の場合は,最初の右角括弧文字が検出されたときに,指定は終了する。

  バイト [ 指定子の前に l (小文字のエル) が指定されていない場合は, scanset に含まれる文字はシングル・バイト文字だけでなければならない。この場合,対応する引数は,シーケンスの他に,自動的に末尾に付加されるヌル・バイトを格納できるだけの十分な大きさの char の配列を指すポインタでなければならない。

[ 指定子の前に l (小文字のエル) が指定されている場合は,入力シーケンス内の文字はマルチバイト文字であると解釈され,その後の処理のためにワイド文字シーケンスに変換される。文字の範囲が scanset に指定されている場合は,処理は現在のプログラムのロケールの LC_COLLATE カテゴリに従って実行される。この場合,対応する引数は,シーケンスの他に,自動的に末尾に付加されるヌル・ワイド文字を格納できるだけの十分な大きさの wchar_t の配列を指すポインタでなければならない。

  ワイド文字 [ 変換指定子の前に l (小文字のエル) が指定されていない場合は,処理は %l[ 指定子のバイト入力の場合と同じである。ただし,対応する引数は,マルチバイト・シーケンスの他に,自動的に末尾に付加されるヌル・バイトを格納できるだけの十分な大きさの char の配列を指すポインタでなければならない。

[ 変換指定子の前に l (小文字のエル) が指定されている場合は,処理は前に説明した場合と同じであるが,対応する引数は,ワイド文字シーケンスの他に,自動的に末尾に付加されるヌル・ワイド文字を格納できるだけの十分な大きさの wchar_t の配列を指すポインタでなければならない。

p   void を指すポインタが引数として期待される。入力値は 16 進数として解釈される。
n   入力は使用されない。対応する引数は整数を指すポインタである。整数は,書式設定された入力関数に対するこの呼び出しで,これまで入力ストリームから読み込まれた文字数として代入される。 %n ディレクティブの実行は,書式設定された入力関数の実行が終了したときに返される代入カウントを増分しない。
%   1 つのパーセント記号に対応する。変換や代入は実行されない。完全な変換指定は %% である。

1 バイトまたはワイド文字。ただし,どちらも示されていない場合は,指定子の説明は両方に適用される。

注意事項

  • 角括弧 ([ ]) 変換指定子を使用して,入力フィールドの区切り文字を変更することができます。変更しなかった場合は,入力フィールドは空白文字以外の文字列として定義されます。入力フィールドは次の空白文字が検出されるまで,またはフィールド幅が指定されているときは,そのフィールド幅に到達するまでであると解釈されます。改行文字は空白文字であるため,関数は行やレコード境界を超えて読み込みます。

  • 入力変換関数のいずれかを呼び出すと,前の呼び出しで最後に処理された文字の直後から検索が再開されます。

  • 代入禁止文字 (*) が書式指定に指定されている場合は,代入は実行されません。対応する入力フィールドが解釈された後,スキップされます。

  • HP C では値による呼び出しだけが認められるため,引数はポインタまたは他のアドレス値に評価される式でなければなりません。数値を 10 進数として読み込み,その値を n に代入するには,次の形式を使用する必要があります。

    scanf("%d", &n) 
    

    次の形式は使用できません。

    scanf("%d", n) 
    

  • 書式指定の空白は,入力フィールドの省略可能な空白に対応します。次の書式指定について考えてみましょう。

    field = %x 
    


    この書式指定は次の形式に対応します。

    field = 5218 
    field=5218 
    field= 5218 
    field =5218 
    


    次の例には対応しません。

    fiel d=5218 
    


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.