X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=release%2Fman3%2Fscanf.3;h=2aae999861998cfdb1adafb9523d0970ba2b0e51;hb=bb92023e2caf6dc30bd3a8f07877ec870c853e23;hp=36b787c4cdfbde06f8df877d3383e5f88b6c1d6a;hpb=ce024239a1d8e74a7a44f7c24cee4375cb13b3ef;p=linuxjm%2FLDP_man-pages.git diff --git a/release/man3/scanf.3 b/release/man3/scanf.3 index 36b787c4..2aae9998 100644 --- a/release/man3/scanf.3 +++ b/release/man3/scanf.3 @@ -5,6 +5,7 @@ .\" 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: @@ -32,6 +33,7 @@ .\" 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 .\" @@ -47,600 +49,303 @@ .\" Add ERRORS section. .\" Document the 'a' and 'm' modifiers for dynamic string allocation. .\" -.\" Japanese Version Copyright (c) 1997 YOSHINO Takashi -.\" all rights reserved. -.\" Translated 1998-02-17, YOSHINO Takashi -.\" Updated 2003-02-23, Kentaro Shirakata -.\" Updated 2005-09-18, Akihiro MOTOKI -.\" Updated 2008-08-11, Akihiro MOTOKI, LDP v3.05 +.\"******************************************************************* .\" -.\"WORD: conversion specifications 変換指定 -.\"WORD: type modifier 型修飾子 +.\" 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 書式 .nf -.B #include +\fB#include \fP -.BI "int scanf(const char *" format ", ...);" -.BI "int fscanf(FILE *" stream ", const char *" format ", ...);" -.BI "int sscanf(const char *" str ", const char *" format ", ...);" +\fBint scanf(const char *\fP\fIformat\fP\fB, ...);\fP +\fBint fscanf(FILE *\fP\fIstream\fP\fB, const char *\fP\fIformat\fP\fB, ...);\fP +\fBint sscanf(const char *\fP\fIstr\fP\fB, const char *\fP\fIformat\fP\fB, ...);\fP .sp -.B #include +\fB#include \fP -.BI "int vscanf(const char *" format ", va_list " ap ); -.BI "int vsscanf(const char *" str ", const char *" format ", va_list " ap ); -.BI "int vfscanf(FILE *" stream ", const char *" format ", va_list " ap ); +\fBint vscanf(const char *\fP\fIformat\fP\fB, va_list \fP\fIap\fP\fB);\fP +\fBint vsscanf(const char *\fP\fIstr\fP\fB, const char *\fP\fIformat\fP\fB, va_list \fP\fIap\fP\fB);\fP +\fBint vfscanf(FILE *\fP\fIstream\fP\fB, const char *\fP\fIformat\fP\fB, va_list \fP\fIap\fP\fB);\fP .fi .sp .in -4n -glibc 向けの機能検査マクロの要件 -.RB ( feature_test_macros (7) -参照): +glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): .in .ad l .sp -.BR vscanf (), -.BR vsscanf (), -.BR vfscanf (): +\fBvscanf\fP(), \fBvsscanf\fP(), \fBvfscanf\fP(): .RS 4 -_XOPEN_SOURCE\ >=\ 600 || _ISOC99_SOURCE || -_POSIX_C_SOURCE\ >=\ 200112L; +_XOPEN_SOURCE\ >=\ 600 || _ISOC99_SOURCE || _POSIX_C_SOURCE\ >=\ 200112L; .br -or -.I "cc -std=c99" +or \fIcc \-std=c99\fP .ad .RE .SH 説明 -.BR scanf () -関数グループは、以下に述べるように、 -.I format -に従って入力を読み込むものである。 -この書式には -.I "「変換指定」 (conversion specifications)" -を含めることができ、変換指定があれば、その変換の結果は -.I format -に続く -.I pointer -引き数が指す場所に格納される。 -それぞれの -.I pointer -引き数の型は、対応する変換指定が返す値に +\fBscanf\fP() 関数グループは、以下に述べるように、 \fIformat\fP に従って入力を読み込むものである。 この書式には \fI「変換指定」 +(conversion specifications)\fP を含めることができ、変換指定があれば、その変換の結果は \fIformat\fP に続く +\fIpointer\fP 引き数が指す場所に格納される。 それぞれの \fIpointer\fP 引き数の型は、対応する変換指定が返す値に 適合していなければならない。 -.I format -中の変換指定の個数が -.I pointer -引き数の数より多かった場合の結果は未定義である。 -.I pointer -引き数の数が変換指定の個数よりも多かった場合、 -余分な -.I pointer -引き数の評価は行われるが、それ以外は行われず無視される。 +\fIformat\fP 中の変換指定の個数が \fIpointer\fP 引き数の数より多かった場合の結果は未定義である。 \fIpointer\fP +引き数の数が変換指定の個数よりも多かった場合、 余分な \fIpointer\fP 引き数の評価は行われるが、それ以外は行われず無視される。 -.BR scanf () -関数は標準入力ストリーム -.I stdin -からの入力を読み込む。 -.BR fscanf () -はストリームポインタ -.I stream -からの入力を読み込む。 -.BR sscanf () -は文字列ポインタ -.I str -で示された文字列からの入力を読み込む。 +\fBscanf\fP() 関数は標準入力ストリーム \fIstdin\fP からの入力を読み込む。 \fBfscanf\fP() はストリームポインタ +\fIstream\fP からの入力を読み込む。 \fBsscanf\fP() は文字列ポインタ \fIstr\fP で示された文字列からの入力を読み込む。 .PP -.BR vfscanf () -関数は -.BR vfprintf (3) -と同様に、ストリームポインタ -.I stream -からの入力をポインタの可変長引き数リストを用いて読み込む -.RB ( stdarg (3) -を参照)。 -.BR vscanf () -関数は、可変長引き数のリストに基づき標準入力からの読み取りを行う。 -.BR vsscanf () -関数はそのリストに基づき文字列から読み取る。 -これらの関係は -.BR vprintf (3) -と -.BR vsprintf (3) -関数の関係と同様である。 +\fBvfscanf\fP() 関数は \fBvfprintf\fP(3) と同様に、ストリームポインタ \fIstream\fP +からの入力をポインタの可変長引き数リストを用いて読み込む (\fBstdarg\fP(3) を参照)。 \fBvscanf\fP() +関数は、可変長引き数のリストに基づき標準入力からの読み取りを行う。 \fBvsscanf\fP() 関数はそのリストに基づき文字列から読み取る。 +これらの関係は \fBvprintf\fP(3) と \fBvsprintf\fP(3) 関数の関係と同様である。 .PP -.I format -文字列は -.I "「命令」 (directive)" -の列で構成される。命令は入力文字の系列をどのように処理するかを指示する -ものである。ある命令の処理が失敗すると、入力はそれ以上読み込まれず、 -.BR scanf () -は返る。「失敗」は -.I "「入力の失敗」 (input failure)" -と -.I "「一致の失敗」 (matching failure)" -のいずれかである。 -入力の失敗は入力文字が使用できなかったことを意味し、 -一致の失敗は入力が不適切であったこと (下記参照) を意味する。 +\fIformat\fP 文字列は \fI「命令」 (directive)\fP の列で構成される。命令は入力文字の系列をどのように処理するかを指示する +ものである。ある命令の処理が失敗すると、入力はそれ以上読み込まれず、 \fBscanf\fP() は返る。「失敗」は \fI「入力の失敗」 (input +failure)\fP と \fI「一致の失敗」 (matching failure)\fP のいずれかである。 +入力の失敗は入力文字が使用できなかったことを意味し、 一致の失敗は入力が不適切であったこと (下記参照) を意味する。 命令は以下のいずれかである: -.TP +.TP \(bu -ホワイトスペース (スペース、タブ、改行など; -.BR isspace (3) -参照) の列。 -この命令は、入力中の任意の個数のホワイトスペースに一致する。 -(「何もなし」にも一致する)。 -.TP +ホワイトスペース (スペース、タブ、改行など; \fBisspace\fP(3) 参照) の列。 +この命令は、入力中の任意の個数のホワイトスペースに一致する。 (「何もなし」にも一致する)。 +.TP \(bu -通常文字 (つまり、ホワイトスペースと \(aq%\(aq 以外の文字)。 -この文字は入力の次の文字に正確に一致しなければならない。 -.TP +通常文字 (つまり、ホワイトスペースと \(aq%\(aq 以外の文字)。 この文字は入力の次の文字に正確に一致しなければならない。 +.TP \(bu -変換指定。変換指定は \(aq%\(aq (パーセント) 文字で始まる。 -入力された文字の系列はこの指定にもとづいて変換され、 -変換結果は対応する -.I pointer -引き数が指す場所に格納される。 -入力の次の文字が変換指定と一致しない場合は、変換は失敗する -\(emこれが -.I "「一致の失敗」 (matching failure)" -である。 +変換指定。変換指定は \(aq%\(aq (パーセント) 文字で始まる。 入力された文字の系列はこの指定にもとづいて変換され、 変換結果は対応する +\fIpointer\fP 引き数が指す場所に格納される。 入力の次の文字が変換指定と一致しない場合は、変換は失敗する \(emこれが \fI「一致の失敗」 +(matching failure)\fP である。 .PP -.I format -中の各々の -.I "「変換指定」" -は文字 \(aq%\(aq か文字系列 "\fB%\fP\fIn\fP\fB$\fP" -(違いについては後述) で始まり、以下の要素が続く。 -.TP +\fIformat\fP 中の各々の \fI「変換指定」\fP は文字 \(aq%\(aq か文字系列 "\fB%\fP\fIn\fP\fB$\fP" (違いについては後述) +で始まり、以下の要素が続く。 +.TP \(bu -代入抑制文字 \(aq*\(aq (省略可能)。 -.BR scanf () -は変換指定に指示された通り入力を読み込むが、その入力は捨てられる。 -対応する -.I pointer -引き数は必要なく、 -.BR scanf () -が返す代入が成功した数にこの指定は含まれない。 -.TP +代入抑制文字 \(aq*\(aq (省略可能)。 \fBscanf\fP() は変換指定に指示された通り入力を読み込むが、その入力は捨てられる。 対応する +\fIpointer\fP 引き数は必要なく、 \fBscanf\fP() が返す代入が成功した数にこの指定は含まれない。 +.TP \(bu -文字 \(aqa\(aq (省略可能)。これは文字列変換とともに使用され、これを使うと -呼び出し元が入力を保持する対応するバッファを確保する必要がなくなる。 -代わりに -.BR scanf () -が必要な大きさのバッファを確保し、このバッファのアドレスを -対応する -.I pointer -引き数に代入する。 -.I pointer -引き数は -.I "char *" -型の変数へのポインタでなければならない -(変数自体は呼び出し前に初期化されている必要はない)。 -呼び出し元は、不要になった時点で、このバッファを -.BR free (3) -すべきである。この機能は GNU による拡張である。 -C99 は \(aqa\(aq 文字を変換指定として使用している -(こちらも GNU の実装と同じように使用することができる)。 -.TP +An optional \(aqm\(aq character. This is used with string conversions +(\fI%s\fP, \fI%c\fP, \fI%[\fP), and relieves the caller of the need to allocate a +corresponding buffer to hold the input: instead, \fBscanf\fP() allocates a +buffer of sufficient size, and assigns the address of this buffer to the +corresponding \fIpointer\fP argument, which should be a pointer to a \fIchar *\fP +variable (this variable does not need to be initialized before the call). +The caller should subsequently \fBfree\fP(3) this buffer when it is no longer +required. +.TP \(bu -.I "「最大フィールド幅」" -を指定する 10進数 (省略可能)。 -この最大値に達するか、一致しない文字が見つかるか、のどちらかに -なると、文字の読み込みを停止する。 -ほとんどの変換では、先頭のホワイトスペース文字は捨てられ -(例外については後述する)、 -捨てられたこれらの文字は最大フィールド幅の計算には含まれない。 -文字列の入力変換では、入力の末尾を示す終端の NULL バイト (\(aq\\0\(aq) -も格納されるが、最大フィールド幅にはこの終端バイトは含まれない。 -.TP +\fI「最大フィールド幅」\fP を指定する 10進数 (省略可能)。 この最大値に達するか、一致しない文字が見つかるか、のどちらかに +なると、文字の読み込みを停止する。 ほとんどの変換では、先頭のホワイトスペース文字は捨てられ (例外については後述する)、 +捨てられたこれらの文字は最大フィールド幅の計算には含まれない。 文字列の入力変換では、入力の末尾を示す終端の NULL バイト +(\(aq\e0\(aq) も格納されるが、最大フィールド幅にはこの終端バイトは含まれない。 +.TP \(bu -.I "「型修飾子」 (type modifier characters)" -(省略可能)。 -例えば、型修飾子 -.B l -を -.B %d -などの整数変換と一緒に使うと、対応する -.I pointer -引き数が -.I int -ではなく -.I "long int" -を参照していることを指定できる。 -.TP +\fI「型修飾子」 (type modifier characters)\fP (省略可能)。 例えば、型修飾子 \fBl\fP を \fB%d\fP +などの整数変換と一緒に使うと、対応する \fIpointer\fP 引き数が \fIint\fP ではなく \fIlong int\fP を参照していることを指定できる。 +.TP \(bu -.I "「変換指定」" -: 実行すべき入力変換の種類を指定する。 +\fI「変換指定」\fP : 実行すべき入力変換の種類を指定する。 .PP -.I format -中の変換指定は、\(aq%\(aq で始まるか、 -"\fB%\fP\fIn\fP\fB$\fP" で始まるかの、いずれかの形式である。 -これら 2つの形式を同じ -.I format -文字列に混ぜることはできない。但し、"\fB%\fP\fIn\fP\fB$\fP" を -含む文字列に -.B %% -と -.B %* -を含めることはできる。 -.I format -に \(aq%\(aq 指定が含まれている場合、各々の \(aq%\(aq 指定と -後続の -.I pointer -引き数はその順番通りに対応する。 -"\fB%\fP\fIn\fP\fB$\fP" 形式 -(POSIX.1-2001 では規定されているが、C99 にはない) -では、 -.I n -は 10進数であり、変換後の入力を -.I format -の後ろの -.I n -番目の -.I pointer +\fIformat\fP 中の変換指定は、\(aq%\(aq で始まるか、 "\fB%\fP\fIn\fP\fB$\fP" で始まるかの、いずれかの形式である。 これら +2つの形式を同じ \fIformat\fP 文字列に混ぜることはできない。但し、"\fB%\fP\fIn\fP\fB$\fP" を 含む文字列に \fB%%\fP と \fB%*\fP +を含めることはできる。 \fIformat\fP に \(aq%\(aq 指定が含まれている場合、各々の \(aq%\(aq 指定と 後続の +\fIpointer\fP 引き数はその順番通りに対応する。 "\fB%\fP\fIn\fP\fB$\fP" 形式 (POSIX.1\-2001 では規定されているが、C99 +にはない) では、 \fIn\fP は 10進数であり、変換後の入力を \fIformat\fP の後ろの \fIn\fP 番目の \fIpointer\fP 引き数が参照する場所に格納することを指定する。 .SS 変換 -変換指定には、以下の -.I "「型修飾子」" -を入れることができる。 -.TP -.B h -変換が -\fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP, \fBn\fP -のいずれかであり、次のポインタが -.RI ( int -ではなく) -.I short int -か -.I unsigned short int -へのポインタであることを示す。 -.TP -.B hh -.B h -と同じだが、次のポインタが -.I signed char -か -.I unsigned char -へのポインタであることを示す。 -.TP -.B j -.B h -と同じだが、次のポインタが -.I intmax_t -か -.I uintmax_t -へのポインタであることを示す。 -この修飾子は C99 で導入された。 -.TP -.B l -変換が -\fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP, \fBn\fP -か -.B n -のいずれかであり次のポインタが -.RI ( int -ではなく) -.I long int -か -.I unsigned long int -へのポインタであること、または、変換が -\fBe\fP, \fBf\fP, \fBg\fP -のうちのひとつであり次のポインタが -.RI ( float -ではなく) -.I double -へのポインタであることのいずれかであることを示す。 -.B l -文字を二つ指定すると、 -.B L -と同じ意味となる。 -.B %c -や -.B %s -とともに使用すると、 -パラメータはそれぞれワイド文字やワイド文字列へのポインタであると -みなされる。 -.\" l のこの使用法は ISO C90 の Amendment 1 で導入された。 -.TP -.B L -\fBe\fP, \fBf\fP, \fBg\fP -変換で、次のポインタが -.I "long double" -へのポインタであることを示す。もしくは、 -\fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP -変換で、次のポインタが -.I "long long" -へのポインタであることのいずれかであることを示す。 -.\" MTK, Jul 05: 以下の内容は新しい ANSI C (つまり C99) では -.\" もはや正しくない。 -.\" (long long は -.\" .I ANSI C -.\" で規定された型ではないことに注意しよう。 -.\" これを用いたプログラムは全てのアーキテクチャに対して -.\" 移植可能ではない。) -.TP -.B q -.B L -と同一である。 -この修飾子は ANSI C には存在しない。 -.TP -.B t -.B h -と同様だが、次のポインタが -.I ptrdiff_t -へのポインタであることを示す。 -この修飾子は C99 で導入された。 -.TP -.B z -.B h -と同様だが、次のポインタが -.I size_t -へのポインタであることを示す。 -この修飾子は C99 で導入された。 +変換指定には、以下の \fI「型修飾子」\fP を入れることができる。 +.TP +\fBh\fP +変換が \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP, \fBn\fP のいずれかであり、次のポインタが (\fIint\fP ではなく) +\fIshort int\fP か \fIunsigned short int\fP へのポインタであることを示す。 +.TP +\fBhh\fP +\fBh\fP と同じだが、次のポインタが \fIsigned char\fP か \fIunsigned char\fP へのポインタであることを示す。 +.TP +\fBj\fP +\fBh\fP と同じだが、次のポインタが \fIintmax_t\fP か \fIuintmax_t\fP へのポインタであることを示す。 この修飾子は C99 +で導入された。 +.TP +\fBl\fP +.\" This use of l was introduced in Amendment 1 to ISO C90. +変換が \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP, \fBn\fP か \fBn\fP のいずれかであり次のポインタが (\fIint\fP +ではなく) \fIlong int\fP か \fIunsigned long int\fP へのポインタであること、または、変換が \fBe\fP, \fBf\fP, +\fBg\fP のうちのひとつであり次のポインタが (\fIfloat\fP ではなく) \fIdouble\fP へのポインタであることのいずれかであることを示す。 +\fBl\fP 文字を二つ指定すると、 \fBL\fP と同じ意味となる。 \fB%c\fP や \fB%s\fP とともに使用すると、 +パラメータはそれぞれワイド文字やワイド文字列へのポインタであると みなされる。 +.TP +\fBL\fP +.\" MTK, Jul 05: The following is no longer true for modern +.\" ANSI C (i.e., C99): +.\" (Note that long long is not an +.\" ANSI C +.\" type. Any program using this will not be portable to all +.\" architectures). +\fBe\fP, \fBf\fP, \fBg\fP 変換で、次のポインタが \fIlong double\fP へのポインタであることを示す。もしくは、 \fBd\fP, \fBi\fP, +\fBo\fP, \fBu\fP, \fBx\fP 変換で、次のポインタが \fIlong long\fP へのポインタであることのいずれかであることを示す。 +.TP +\fBq\fP +\fBL\fP と同一である。 この修飾子は ANSI C には存在しない。 +.TP +\fBt\fP +\fBh\fP と同様だが、次のポインタが \fIptrdiff_t\fP へのポインタであることを示す。 この修飾子は C99 で導入された。 +.TP +\fBz\fP +\fBh\fP と同様だが、次のポインタが \fIsize_t\fP へのポインタであることを示す。 この修飾子は C99 で導入された。 .PP -以下の -.I 「変換指定子」 -が利用可能である。 -.TP -.B % -文字 \(aq%\(aq に対応する。 -書式文字列の中の -.B %\&% -は単一の文字 \(aq%\(aq に対応する。 -変換は行われず (但し、先頭のホワイトスペース文字は捨てられる)、 -変数への代入は生じない。 -.TP -.B d -符号つきの 10進の整数に対応する。 -次のポインタは -.I int -へのポインタでなければならない。 -.TP -.B D -.I ld -と同一である。これは以前の仕様との互換性だけのためにある。 -(注意: これは libc4 の場合だけである。 libc5 や glibc では -.B %D -は暗黙のうちに無視され、古いプログラムにおいて謎に満ちた失敗の原因となる。) -.TP -.B i -符号つき整数に対応する。 -次のポインタは -.I int -へのポインタでなければならない。 -この整数は -.I 0x -または -.I 0X -で開始する場合には 16 進数、 -.I 0 -で開始する場合には 8 進数、その他の場合には 10進数として読み込まれる。 +以下の \fI「変換指定子」\fP が利用可能である。 +.TP +\fB%\fP +文字 \(aq%\(aq に対応する。 書式文字列の中の \fB%\&%\fP は単一の文字 \(aq%\(aq に対応する。 変換は行われず +(但し、先頭のホワイトスペース文字は捨てられる)、 変数への代入は生じない。 +.TP +\fBd\fP +符号つきの 10進の整数に対応する。 次のポインタは \fIint\fP へのポインタでなければならない。 +.TP +\fBD\fP +\fIld\fP と同一である。これは以前の仕様との互換性だけのためにある。 (注意: これは libc4 の場合だけである。 libc5 や glibc +では \fB%D\fP は暗黙のうちに無視され、古いプログラムにおいて謎に満ちた失敗の原因となる。) +.TP +\fBi\fP +符号つき整数に対応する。 次のポインタは \fIint\fP へのポインタでなければならない。 この整数は \fI0x\fP または \fI0X\fP で開始する場合には +16 進数、 \fI0\fP で開始する場合には 8 進数、その他の場合には 10進数として読み込まれる。 この変換で使用される文字は、これらの基数に対応しているものだけである。 -.TP -.B o -符号なしの 8 進の整数に対応する。 -次のポインタは -.I "unsigned int" -でなければならない。 -.TP -.B u -符号なしの 10進の整数に対応する。 -次のポインタは -.I "unsigned int" -へのポインタでなければならない。 -.TP -.B x -符号なしの 16 進の整数に対応する。 -次のポインタは -.I "unsigned int" -へのポインタでなければならない。 -.TP -.B X -.B x -と同一である。 -.TP -.B f -符号つき浮動小数点実数に対応する。 -次のポインタは -.I float -へのポインタでなければならない。 -.TP -.B e -.B f -と同一である。 -.TP -.B g -.B f -と同一である。 -.TP -.B E -.B f -と同一である。 -.TP -.B a -(C99) -.B f -と同一である。 -.TP -.B s -ホワイトスペースではない文字で構成された文字列に対応する。 -次のポインタは文字の配列へのポインタでなければならず、 -その文字配列は、入力された文字列と (自動的に追加される) 終端の NULL -バイト (\(aq\\0\(aq) を格納するのに十分な大きさでなければならない。 -文字列の入力は、ホワイトスペースが入力されるか、最大フィールド幅に -達するか、のどちらかが起こると停止される。 -.TP -.B c -.I "「最大フィールド幅」" -(デフォルトは 1) で指定された幅の文字の列に対応する。 -次のポインタは -.I char -へのポインタで、すべての文字を格納するのに十分な領域が -なければならない (終端の NULL バイトは追加されない)。 -通常行われる先頭のホワイトスペースの読み飛ばしは行われない。 -先頭のホワイトスペースを読み飛ばすためには、 +.TP +\fBo\fP +符号なしの 8 進の整数に対応する。 次のポインタは \fIunsigned int\fP でなければならない。 +.TP +\fBu\fP +符号なしの 10進の整数に対応する。 次のポインタは \fIunsigned int\fP へのポインタでなければならない。 +.TP +\fBx\fP +符号なしの 16 進の整数に対応する。 次のポインタは \fIunsigned int\fP へのポインタでなければならない。 +.TP +\fBX\fP +\fBx\fP と同一である。 +.TP +\fBf\fP +符号つき浮動小数点実数に対応する。 次のポインタは \fIfloat\fP へのポインタでなければならない。 +.TP +\fBe\fP +\fBf\fP と同一である。 +.TP +\fBg\fP +\fBf\fP と同一である。 +.TP +\fBE\fP +\fBf\fP と同一である。 +.TP +\fBa\fP +(C99) \fBf\fP と同一である。 +.TP +\fBs\fP +ホワイトスペースではない文字で構成された文字列に対応する。 次のポインタは文字の配列へのポインタでなければならず、 その文字配列は、入力された文字列と +(自動的に追加される) 終端の NULL バイト (\(aq\e0\(aq) を格納するのに十分な大きさでなければならない。 +文字列の入力は、ホワイトスペースが入力されるか、最大フィールド幅に 達するか、のどちらかが起こると停止される。 +.TP +\fBc\fP +\fI「最大フィールド幅」\fP (デフォルトは 1) で指定された幅の文字の列に対応する。 次のポインタは \fIchar\fP +へのポインタで、すべての文字を格納するのに十分な領域が なければならない (終端の NULL バイトは追加されない)。 +通常行われる先頭のホワイトスペースの読み飛ばしは行われない。 先頭のホワイトスペースを読み飛ばすためには、 フォーマット文の中で明示的にスペースを使用すれば良い。 -.TP -.B \&[ -格納された文字列のうちから取り出された、 -指定された文字の集合で構成される空ではない文字の列に対応する。 -次のポインタは -.I char -へのポインタでなければならず、 -そこには文字列中のすべての文字と終端の NULL バイト -を格納するための十分な領域がなければならない。 -通常行われる先頭のホワイトスペースの読み飛ばしは行われない。 -この文字列は特別な集合の中の文字で構成されている。 -この集合は -開き括弧 -.B [ -と閉じ括弧 -.B ] -の間の文字で定義される。 -開き括弧のあとの最初の文字が曲アクセント記号 -.RB ( ^ ) -の場合、集合はこれらの文字を含まないものとなる。 -閉じ括弧を集合に含ませるためには、この文字を開き括弧または -曲アクセント記号のあとの最初の文字にすればよい。 -つまり、他の位置に閉じ括弧を置くと文字の集合が終る。 -ハイフン -.B \- -もまた特殊文字である。 -二つの異なる文字の間に置かれた時、この文字は、 -その間にある全ての文字を集合に加える。 -ハイフン自体を含ませるためには、 -括弧が閉じる前の最後の一文字をハイフンにすればよい。 -例えば、 -.B [^]0\-9\-] -は「閉じ括弧、0 〜 9、ハイフンの 3 種類を除く全ての文字」の集合を意味する。 -この文字列は -集合に含まれていない (曲アクセントの場合には含まれる) 文字の +.TP +\fB\&[\fP +格納された文字列のうちから取り出された、 指定された文字の集合で構成される空ではない文字の列に対応する。 次のポインタは \fIchar\fP +へのポインタでなければならず、 そこには文字列中のすべての文字と終端の NULL バイト を格納するための十分な領域がなければならない。 +通常行われる先頭のホワイトスペースの読み飛ばしは行われない。 この文字列は特別な集合の中の文字で構成されている。 この集合は 開き括弧 \fB[\fP +と閉じ括弧 \fB]\fP の間の文字で定義される。 開き括弧のあとの最初の文字が曲アクセント記号 (\fB^\fP) +の場合、集合はこれらの文字を含まないものとなる。 閉じ括弧を集合に含ませるためには、この文字を開き括弧または +曲アクセント記号のあとの最初の文字にすればよい。 つまり、他の位置に閉じ括弧を置くと文字の集合が終る。 ハイフン \fB\-\fP もまた特殊文字である。 +二つの異なる文字の間に置かれた時、この文字は、 その間にある全ての文字を集合に加える。 ハイフン自体を含ませるためには、 +括弧が閉じる前の最後の一文字をハイフンにすればよい。 例えば、 \fB[^]0\-9\-]\fP は「閉じ括弧、0 〜 9、ハイフンの 3 +種類を除く全ての文字」の集合を意味する。 この文字列は 集合に含まれていない (曲アクセントの場合には含まれる) 文字の 出現または確保された領域が使い切られた時に終了する。 -.TP -.B p -.RB ( printf (3) -の -.B %p -で印字されるような) ポインタ値に対応する。 -次のポインタは -.I void +.TP +\fBp\fP +(\fBprintf\fP(3) の \fB%p\fP で印字されるような) ポインタ値に対応する。 次のポインタは \fIvoid\fP へのポインタへのポインタでなければならない。 -.TP -.B n -どんな入力も必要としない。 -そのかわりに、 -入力からここまで消費された文字数が次のポインタで指定された場所に -格納される。 -このポインタは -.I int -へのポインタでなければならない。 -変換を抑制するのであれば -.B * -代入抑制文字を使って抑制することができるのだが、 -この変換指定子は変換では「ない」。 -C 言語の標準規格では「実行の完了時に返される代入の回数は -.B %n -命令の実行では増加しない」となっているが、 -正誤表の内容はこれと矛盾するようである。おそらく、 -.B %n -変換が返り値に与える影響についてはどのような仮定もしないのが -賢明であろう。 +.TP +\fBn\fP +どんな入力も必要としない。 そのかわりに、 入力からここまで消費された文字数が次のポインタで指定された場所に 格納される。 このポインタは \fIint\fP +へのポインタでなければならない。 変換を抑制するのであれば \fB*\fP 代入抑制文字を使って抑制することができるのだが、 +この変換指定子は変換では「ない」。 C 言語の標準規格では「実行の完了時に返される代入の回数は \fB%n\fP 命令の実行では増加しない」となっているが、 +正誤表の内容はこれと矛盾するようである。おそらく、 \fB%n\fP 変換が返り値に与える影響についてはどのような仮定もしないのが 賢明であろう。 .SH 返り値 -これらの関数は、一致と代入が成功した入力要素の個数を返す。 -返される値は渡された変換の個数よりも少ないこともあり、 -最初に一致の失敗があった場合には 0 になることもある。 +これらの関数は、一致と代入が成功した入力要素の個数を返す。 返される値は渡された変換の個数よりも少ないこともあり、 最初に一致の失敗があった場合には 0 +になることもある。 -最初の変換が成功する前に入力の最後に達して、一致の失敗が起こった場合には、 -.B EOF -が返される。また、 -読み込みエラーが発生した場合にも -.B EOF -が返される。読み込みエラーの場合には、そのストリームの -エラー指示子がセットされ -.RB ( ferror (3) -参照)、 -.I errno +最初の変換が成功する前に入力の最後に達して、一致の失敗が起こった場合には、 \fBEOF\fP が返される。また、 読み込みエラーが発生した場合にも +\fBEOF\fP が返される。読み込みエラーの場合には、そのストリームの エラー指示子がセットされ (\fBferror\fP(3) 参照)、 \fIerrno\fP にエラーを示す値がセットされる。 .SH エラー -.TP -.B EAGAIN -.I stream -に対応するファイルディスクリプタが nonblocking となっており、 -読み込み操作は停止 (block) することになる。 -.TP -.B EBADF -.I stream -に対応するファイルディスクリプタが無効であるが、 -読み込み用にオープンされていない。 -.TP -.B EILSEQ +.TP +\fBEAGAIN\fP +\fIstream\fP に対応するファイルディスクリプタが nonblocking となっており、 読み込み操作は停止 (block) することになる。 +.TP +\fBEBADF\fP +\fIstream\fP に対応するファイルディスクリプタが無効であるが、 読み込み用にオープンされていない。 +.TP +\fBEILSEQ\fP 入力されたバイト列が有効な文字を構成していない。 -.TP -.B EINTR -読み込み操作がシグナルにより割り込まれた。 -.BR signal (7) -参照。 -.TP -.B EINVAL -引き数が十分でない。または -.I format -が NULL である。 -.TP -.B ENOMEM +.TP +\fBEINTR\fP +読み込み操作がシグナルにより割り込まれた。 \fBsignal\fP(7) 参照。 +.TP +\fBEINVAL\fP +引き数が十分でない。または \fIformat\fP が NULL である。 +.TP +\fBENOMEM\fP メモリ不足。 -.TP -.B ERANGE +.TP +\fBERANGE\fP 整数変換の結果が、対応する整数型に格納できるサイズを越えてしまう。 .SH 準拠 -.BR fscanf (), -.BR scanf (), -.BR sscanf () -関数は C89, C99, POSIX.1-2001 に準拠している。 -これらの標準では、エラー -.B ERANGE -は規定されていない。 +\fBfscanf\fP(), \fBscanf\fP(), \fBsscanf\fP() 関数は C89, C99, POSIX.1\-2001 に準拠している。 +これらの標準では、エラー \fBERANGE\fP は規定されていない。 .PP -.B q -指定子は -.I "long long" -の 4.4BSD での記述方法である。 -一方、整数変換での -.B ll -または -.B L -の使用は GNU での拡張である。 +\fBq\fP 指定子は \fIlong long\fP の 4.4BSD での記述方法である。 一方、整数変換での \fBll\fP または \fBL\fP の使用は GNU +での拡張である。 .PP -これらの関数の Linux 版は -.I GNU -.I libio -ライブラリーを元にしている。 -より簡潔な説明には -.I GNU -.I libc (glibc-1.08) -の -.I info -文書に目を通すこと。 +これらの関数の Linux 版は \fIGNU\fP \fIlibio\fP ライブラリーを元にしている。 より簡潔な説明には \fIGNU\fP \fIlibc +(glibc\-1.08)\fP の \fIinfo\fP 文書に目を通すこと。 .SH 注意 -GNU C ライブラリ (glibc) では非標準のオプションをサポートしており、 -このオプションを使うと変換指定子 -.B %s -や -\fB%a[\fP\fIrange\fP\fB]\fP -への入力文字列に対して十分な大きさの文字列をライブラリが動的に確保する -ようになる。 -.\" この機能は少なくとも glibc 2.0 時点から存在しているようだ。 -この機能を使用するには、長さ修飾子として -.B a -を指定する (したがって、全体としては -.B %as -や -\fB%a[\fP\fIrange\fP\fB]\fP となる)。 -以下の例にあるように、呼び出し側は返された文字列を -.BR free (3) -しなければならない。 +The GNU C library supported the dynamic allocation conversion specifier (as +a nonstandard extension) via the \fBa\fP character. This feature seems to be +present at least as far back as glibc 2.0. +.PP +It is not available if the program is compiled with \fIgcc \-std=c99\fP or \fIgcc +\-D_ISOC99_SOURCE\fP (unless \fB_GNU_SOURCE\fP is also specified), in which case +the \fBa\fP is interpreted as a specifier for floating\-point numbers (see +above). + +バージョン 2.7 以降では、glibc は \fBa\fP 修飾子と同じ目的で \fBm\fP 修飾子も提供している。 \fBm\fP 修飾子は以下の利点がある。 +.IP * 2 +\fB%c\fP 変換指定子にも適用できる (例えば \fB%3mc\fP)。 +.IP * +浮動小数点変換指定子としての \fB%a\fP との紛らわしさが避けられる (また \fIgcc \-std=c99\fP などの影響も避けられる)。 +.IP * +It is specified in the POSIX.1\-2008 standard. +.SH バグ +全ての関数は、完全に C89 に準拠している。しかし 追加で \fBq\fP と \fBa\fP 指定子が提供されており、同様に \fBL\fP と \fBl\fP +指定子の付加的な振る舞いもある。後者は、 C89 で定義された指定子の振る舞いを変更するものなので、 バグとみなされるかもしれない。 +.PP +ANSI C で定義された型修飾子と変換指定子の組み合わせの中には 意味を +なさないものがある (例えば、 \fB%Ld\fP)。 これらが指定された場合、 +Linux 上でははっきりと定義された振る舞いをするかもしれないが、 +他のアーキテクチャでも同様になっているとは限らない。 +それゆえに、ほとんどの場合、 ANSI C で定義されていない修飾子を使用した +方が良い。すなわち、 \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP 変換や \fBll\fP +と組み合わせる場合には、 \fBL\fP の代わりに \fBq\fP を使用した方が良い。 +.PP +\fBq\fP の使用方法は 4.4BSD と同じではない。 4.4BSD では \fBq\fP は \fBL\fP と同等に浮動小数の変換に使用される。 +.SH 例 +To use the dynamic allocation conversion specifier, specify \fBm\fP as a length +modifier (thus \fB%ms\fP or \fB%m[\fP\fIrange\fP\fB]\fP). The caller must \fBfree\fP(3) +the returned string, as in the following example: .in +4n .nf @@ -648,99 +353,23 @@ char *p; int n; errno = 0; -n = scanf("%a[a-z]", &p); +n = scanf("%m[a\-z]", &p); if (n == 1) { - printf("read: %s\\n", p); + printf("read: %s\en", p); free(p); } else if (errno != 0) { perror("scanf"); } else { - fprintf(stderr, "No matching characters\\n"): + fprintf(stderr, "No matching characters\en"); } .fi .in .PP -上記の例にあるように、 -.BR scanf () -が文字列の読み込みに成功した場合にだけ、 -.BR free (3) -を呼び出す必要がある。 -.PP -.I "gcc -std=c99" -や -.I "gcc -D_ISOC99_SOURCE" -でコンパイルしたプログラムでは -.RB ( _GNU_SOURCE -も同時に指定していない場合)、 -.B a -修飾子は利用できない。 -上記の場合、 -.B a -は (上述の通り) 浮動小数点数を示す変換指定子と解釈される。 - -バージョン 2.7 以降では、glibc は -.B a -修飾子と同じ目的で -.B m -修飾子も提供している。 -.B m -修飾子は以下の利点がある。 -.IP * 2 -.B %c -変換指定子にも適用できる (例えば -.BR %3mc )。 -.IP * -浮動小数点変換指定子としての -.B %a -との紛らわしさが避けられる (また -.I "gcc -std=c99" -などの影響も避けられる)。 -.IP * -POSIX.1 標準の次の改訂版で規定される。 -.SH バグ -全ての関数は、完全に C89 に準拠している。しかし -追加で -.B q -と -.B a -指定子が提供されており、同様に -.B L -と -.B l -指定子の付加的な振る舞いもある。後者は、 -C89 で定義された指定子の振る舞いを変更するものなので、 -バグとみなされるかもしれない。 -.PP -ANSI C で定義された型修飾子と変換指定子の組み合わせの中には -意味をなさないものがある -(例えば、 -.BR "%Ld" )。 -これらが指定された場合、 -Linux 上でははっきりと定義された振る舞いをするかもしれないが、 -他のアーキテクチャでも同様になっているとは限らない。 -それゆえに、ほとんどの場合、 -ANSI C で定義されていない修飾子を使用した方が良い。 -すなわち、 -\fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP -変換や -.B ll -と組み合わせる場合には、 -.B L -の代わりに -.B q -を使用した方が良い。 -.PP -.B q -の使用方法は 4.4BSD と同じではない。 -4.4BSD では -.B q -は -.B L -と同等に浮動小数の変換に使用される。 +上記の例にあるように、 \fBscanf\fP() が文字列の読み込みに成功した場合にだけ、 \fBfree\fP(3) を呼び出す必要がある。 .SH 関連項目 -.BR getc (3), -.BR printf (3) -.BR setlocale (3), -.BR strtod (3), -.BR strtol (3), -.BR strtoul (3), +\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.50 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。