日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
2.4 変換指定 |
複数の標準 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 項を参照してください。
情報を入力する場合の書式指定文字列には,次の 3 種類の項目を含むことができます。
各入力ポインタは,対応する変換指定と同じ型のオブジェクトを示すアドレス式です。変換指定は書式指定文字列の一部になります。示されるオブジェクトは,入力値を受け取るターゲットです。変換指定と同じ数だけ入力ポインタが必要であり,アドレスが指定されるオブジェクトは変換指定と同じ型でなければなりません。
変換指定は次の文字で構成され,順序はここに示したとおりになります。
表 2-2 は,パーセント記号 (%) ( または %n$ というシーケンス ) と変換指定子の間に指定できる文字を示しています。これらの文字は省略可能ですが,指定する場合は, 表 2-2 に示した順に指定する必要があります。
2.4.1 入力情報の変換
%n$ というシーケンスは,変換が n 番目の入力ポインタに適用されることを示します。ただし,n は [1, NL_ARGMAX] の範囲の 10 進整数です (
<limits.h>ヘッダ・ファイルを参照)。たとえば,%5$ から始まる変換指定は,変換が書式指定の後の 5 番目の入力ポインタに適用されることを示します。 %$ というシーケンスは無効です。
変換指定の先頭に %n$ というシーケンスが指定されていない場合は,変換指定は左から右に順に入力ポインタに対応付けられます。書式指定では,変換指定を 1 種類だけ (% または %n$) 使用するようにしなければなりません。
文字 | 意味 |
---|---|
* | 代入禁止文字 |
フィールド幅 | 0 以外の 10 進整数であり,最大フィールド幅を指定する。
ワイド文字入力関数の場合は,フィールド幅はワイド文字の文字数で表現される。 バイト入力関数の場合は,ディレクティブが次のいずれかである場合を除き,フィールド幅はバイト数で表現される。
これらの場合,フィールド幅はマルチバイト文字単位で表現される。 /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 は,書式設定された入力の変換指定子を示しています。
指定子 | 入力の種類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 つのパーセント記号に対応する。変換や代入は実行されない。完全な変換指定は %% である。 |
scanf("%d", &n) |
次の形式は使用できません。
scanf("%d", n) |
field = %x |
この書式指定は次の形式に対応します。
field = 5218 field=5218 field= 5218 field =5218 |
次の例には対応しません。
fiel d=5218 |
目次 | 索引 |
|