.\" Chris Torek and the American National Standards Committee X3,
.\" on Information Processing Systems.
.\"
+.\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
+.\" %%%LICENSE_END
.\"
.\" @(#)scanf.3 6.14 (Berkeley) 1/8/93
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH SCANF 3 2011\-09\-28 GNU "Linux Programmer's Manual"
+.TH SCANF 3 2013\-01\-30 GNU "Linux Programmer's Manual"
.SH 名前
scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf \- 書式付き入力変換
.SH 書式
\fIpointer\fP 引き数は必要なく、 \fBscanf\fP() が返す代入が成功した数にこの指定は含まれない。
.TP
\(bu
-文字 \(aqa\(aq (省略可能)。これは文字列変換とともに使用され、これを使うと
+文字 \(aqm\(aq (省略可能)。これは文字列変換 (\fI%s\fP, \fI%c\fP, \fI%[\fP) とともに使用され、これを使うと
呼び出し元が入力を保持する対応するバッファを確保する必要がなくなる。 代わりに \fBscanf\fP()
が必要な大きさのバッファを確保し、このバッファのアドレスを 対応する \fIpointer\fP 引き数に代入する。 \fIpointer\fP 引き数は
-\fIchar *\fP 型の変数へのポインタでなければならない (変数自体は呼び出し前に初期化されている必要はない)。
-呼び出し元は、不要になった時点で、このバッファを \fBfree\fP(3) すべきである。この機能は GNU による拡張である。 C99 は
-\(aqa\(aq 文字を変換指定として使用している (こちらも GNU の実装と同じように使用することができる)。
+\fIchar\ *\fP 型の変数へのポインタでなければならない (変数自体は呼び出し前に初期化されている必要はない)。
+呼び出し元は、不要になった時点で、このバッファを \fBfree\fP(3) すべきである。
.TP
\(bu
\fI「最大フィールド幅」\fP を指定する 10進数 (省略可能)。 この最大値に達するか、一致しない文字が見つかるか、のどちらかに
これらの関数の Linux 版は \fIGNU\fP \fIlibio\fP ライブラリーを元にしている。 より簡潔な説明には \fIGNU\fP \fIlibc
(glibc\-1.08)\fP の \fIinfo\fP 文書に目を通すこと。
.SH 注意
-.\" This feature seems to be present at least as far back as glibc 2.0.
-GNU C ライブラリ (glibc) では非標準のオプションをサポートしており、 このオプションを使うと変換指定子 \fB%s\fP や
-\fB%a[\fP\fIrange\fP\fB]\fP への入力文字列に対して十分な大きさの文字列をライブラリが動的に確保する ようになる。
-この機能を使用するには、長さ修飾子として \fBa\fP を指定する (したがって、全体としては \fB%as\fP や \fB%a[\fP\fIrange\fP\fB]\fP
-となる)。 以下の例にあるように、呼び出し側は返された文字列を \fBfree\fP(3) しなければならない。
-.in +4n
-.nf
-
-char *p;
-int n;
-
-errno = 0;
-n = scanf("%a[a\-z]", &p);
-if (n == 1) {
- printf("read: %s\en", p);
- free(p);
-} else if (errno != 0) {
- perror("scanf");
-} else {
- fprintf(stderr, "No matching characters\en");
-}
-.fi
-.in
-.PP
-上記の例にあるように、 \fBscanf\fP() が文字列の読み込みに成功した場合にだけ、 \fBfree\fP(3) を呼び出す必要がある。
+GNU C ライブラリ (glibc) では、 \fBa\fP 文字による動的割り当て変換指定子 (dynamic allocation conversion
+specifier) を (非標準の拡張として) サポートしている。この機能は少なくとも glibc 2.0 以降で存在しているようである。
.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 修飾子は以下の利点がある。
.IP * 2
.IP *
浮動小数点変換指定子としての \fB%a\fP との紛らわしさが避けられる (また \fIgcc \-std=c99\fP などの影響も避けられる)。
.IP *
-POSIX.1 標準の次の改訂版で規定される。
+POSIX.1\-2008 標準で規定されている。
.SH バグ
全ての関数は、完全に C89 に準拠している。しかし 追加で \fBq\fP と \fBa\fP 指定子が提供されており、同様に \fBL\fP と \fBl\fP
指定子の付加的な振る舞いもある。後者は、 C89 で定義された指定子の振る舞いを変更するものなので、 バグとみなされるかもしれない。
と組み合わせる場合には、 \fBL\fP の代わりに \fBq\fP を使用した方が良い。
.PP
\fBq\fP の使用方法は 4.4BSD と同じではない。 4.4BSD では \fBq\fP は \fBL\fP と同等に浮動小数の変換に使用される。
+.SH 例
+動的割り当て変換指定子を使用するには、長さ修飾子として \fBm\fP を指定する (つまり、全体としては \fB%ms\fP や
+\fB%m[\fP\fIrange\fP\fB]\fP となる)。以下の例にあるように、呼び出し側は返された文字列を \fBfree\fP(3) しなければならない。
+.in +4n
+.nf
+
+char *p;
+int n;
+
+errno = 0;
+n = scanf("%m[a\-z]", &p);
+if (n == 1) {
+ printf("read: %s\en", p);
+ free(p);
+} else if (errno != 0) {
+ perror("scanf");
+} else {
+ fprintf(stderr, "No matching characters\en");
+}
+.fi
+.in
+.PP
+上記の例にあるように、 \fBscanf\fP() が文字列の読み込みに成功した場合にだけ、 \fBfree\fP(3) を呼び出す必要がある。
.SH 関連項目
\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.41 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.52 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。