OSDN Git Service

Update release for LDP 3.67
[linuxjm/LDP_man-pages.git] / release / man3 / scanf.3
index 5b1f225..38353fe 100644 (file)
@@ -67,7 +67,7 @@
 .\" Updated 2013-05-04, Akihiro MOTOKI <amotoki@gmail.com>
 .\" Updated 2013-07-22, Akihiro MOTOKI <amotoki@gmail.com>
 .\"
-.TH SCANF 3 2013\-01\-30 GNU "Linux Programmer's Manual"
+.TH SCANF 3 2014\-01\-11 GNU "Linux Programmer's Manual"
 .SH 名前
 scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf \- 書式付き入力変換
 .SH 書式
@@ -94,7 +94,7 @@ glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7)  参
 .RS 4
 _XOPEN_SOURCE\ >=\ 600 || _ISOC99_SOURCE || _POSIX_C_SOURCE\ >=\ 200112L;
 .br
-or \fIcc \-std=c99\fP
+または \fIcc \-std=c99\fP
 .ad
 .RE
 .SH 説明
@@ -150,8 +150,8 @@ failure)\fP と \fI「一致の失敗」 (matching failure)\fP のいずれか
 \(bu
 \fI「最大フィールド幅」\fP を指定する 10進数 (省略可能)。 この最大値に達するか、一致しない文字が見つかるか、のどちらかに
 なると、文字の読み込みを停止する。 ほとんどの変換では、先頭のホワイトスペース文字は捨てられ (例外については後述する)、
-捨てられたこれらの文字は最大フィールド幅の計算には含まれない。 文字列の入力変換では、入力の末尾を示す終端の NULL バイト
-(\(aq\e0\(aq)  も格納されるが、最大フィールド幅にはこの終端バイトは含まれない。
+捨てられたこれらの文字は最大フィールド幅の計算には含まれない。 文字列の入力変換では、入力の末尾を示す終端のヌルバイト (\(aq\e0\(aq)
+も格納されるが、最大フィールド幅にはこの終端バイトは含まれない。
 .TP 
 \(bu
 \fI「型修飾子」 (type modifier characters)\fP (省略可能)。 例えば、型修飾子 \fBl\fP を \fB%d\fP
@@ -254,18 +254,18 @@ failure)\fP と \fI「一致の失敗」 (matching failure)\fP のいずれか
 .TP 
 \fBs\fP
 ホワイトスペースではない文字で構成された文字列に対応する。 次のポインタは文字の配列へのポインタでなければならず、 その文字配列は、入力された文字列と
-(自動的に追加される) 終端の NULL バイト (\(aq\e0\(aq) を格納するのに十分な大きさでなければならない。
+(自動的に追加される) 終端のヌルバイト (\(aq\e0\(aq) を格納するのに十分な大きさでなければならない。
 文字列の入力は、ホワイトスペースが入力されるか、最大フィールド幅に 達するか、のどちらかが起こると停止される。
 .TP 
 \fBc\fP
 \fI「最大フィールド幅」\fP (デフォルトは 1) で指定された幅の文字の列に対応する。 次のポインタは \fIchar\fP
-へのポインタで、すべての文字を格納するのに十分な領域が なければならない (終端の NULL バイトは追加されない)。
+へのポインタで、すべての文字を格納するのに十分な領域が なければならない (終端のヌルバイトは追加されない)。
 通常行われる先頭のホワイトスペースの読み飛ばしは行われない。 先頭のホワイトスペースを読み飛ばすためには、
 フォーマット文の中で明示的にスペースを使用すれば良い。
 .TP 
 \fB\&[\fP
 格納された文字列のうちから取り出された、 指定された文字の集合で構成される空ではない文字の列に対応する。 次のポインタは \fIchar\fP
-へのポインタでなければならず、 そこには文字列中のすべての文字と終端の NULL バイト を格納するための十分な領域がなければならない。
+へのポインタでなければならず、 そこには文字列中のすべての文字と終端のヌルバイト を格納するための十分な領域がなければならない。
 通常行われる先頭のホワイトスペースの読み飛ばしは行われない。 この文字列は特別な集合の中の文字で構成されている。 この集合は 開き括弧 \fB[\fP
 と閉じ括弧 \fB]\fP の間の文字で定義される。 開き括弧のあとの最初の文字が曲アクセント記号 (\fB^\fP)
 の場合、集合はこれらの文字を含まないものとなる。 閉じ括弧を集合に含ませるためには、この文字を開き括弧または
@@ -323,20 +323,31 @@ failure)\fP と \fI「一致の失敗」 (matching failure)\fP のいずれか
 これらの関数の Linux 版は \fIGNU\fP \fIlibio\fP ライブラリーを元にしている。 より簡潔な説明には \fIGNU\fP \fIlibc
 (glibc\-1.08)\fP の \fIinfo\fP 文書に目を通すこと。
 .SH 注意
-GNU C ライブラリ (glibc) では、 \fBa\fP 文字による動的割り当て変換指定子 (dynamic allocation conversion
-specifier) を (非標準の拡張として) サポートしている。この機能は少なくとも glibc 2.0 以降で存在しているようである。
+.SS "'a' 代入割り当て (assignment\-allocation) 修飾子"
+元々、 GNU C ライブラリ (glibc) では、 \fBa\fP 文字による文字列入力に対する動的割り当て変換指定子 (dynamic
+allocation conversion specifier) を (非標準の拡張として) サポートしている。この機能は少なくとも glibc 2.0
+の時点ではすでに存在している。 したがって、以下のようにして、 \fBscanf\fP()
+に入力文字列に対してバッファを割り当てさせることができる。割り当てられたバッファは \fI*buf\fP で返される。
+
+    char *buf;
+    scanf("%as", &buf);
+.PP
+この目的で文字 \fBa\fP を使うのは問題をはらんでいる。 なぜなら、 \fBa\fP は ISO C 標準では (浮動小数点入力を表す) の \fBf\fP
+の同義語として定義されているからである。 その代わり、 POSIX.1\-2008 では、(上記の「説明」に書かれている通り)
+代入割り当てを行う修飾子として \fBm\fP が規定されている。
 .PP
-この修飾子は \fIgcc \-std=c99\fP や \fIgcc \-D_ISOC99_SOURCE\fP でコンパイルしたプログラムでは
-(\fB_GNU_SOURCE\fP も同時に指定していない場合) 利用できない。この場合、 \fBa\fP は (上述の通り)
+\fBa\fP 修飾子は \fIgcc \-std=c99\fP や \fIgcc \-D_ISOC99_SOURCE\fP でコンパイルしたプログラムでは
+(\fB_GNU_SOURCE\fP も同時に指定していない場合) 利用できない点に注意。この場合、 \fBa\fP は (上述の通り)
 浮動小数点数を示す変換指定子と解釈される。
 
-バージョン 2.7 以降では、glibc は \fBa\fP 修飾子と同じ目的で \fBm\fP 修飾子も提供している。 \fBm\fP 修飾子は以下の利点がある。
+\fBm\fP 修飾子への対応はバージョン 2.7 以降の glibc で追加されている。新しいプログラムでぇあ \fBa\fP の代わりに \fBm\fP
+を使用すべきである。
+
+POSIX で標準化されているだけでなく、 \fBm\fP 修飾子には \fBa\fP を利用する場合に比べて以下のような利点がある。
 .IP * 2
 \fB%c\fP 変換指定子にも適用できる (例えば \fB%3mc\fP)。
 .IP *
 浮動小数点変換指定子としての \fB%a\fP との紛らわしさが避けられる (また \fIgcc \-std=c99\fP などの影響も避けられる)。
-.IP *
-POSIX.1\-2008 標準で規定されている。
 .SH バグ
 全ての関数は、完全に C89 に準拠している。しかし 追加で \fBq\fP と \fBa\fP 指定子が提供されており、同様に \fBL\fP と \fBl\fP
 指定子の付加的な振る舞いもある。後者は、 C89 で定義された指定子の振る舞いを変更するものなので、 バグとみなされるかもしれない。
@@ -377,6 +388,6 @@ if (n == 1) {
 \fBgetc\fP(3), \fBprintf\fP(3)  \fBsetlocale\fP(3), \fBstrtod\fP(3), \fBstrtol\fP(3),
 \fBstrtoul\fP(3),
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.67 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。