Man page - vscanf(3)

Packages contains this manual

Available languages:

en fr ja ro de

Manual

SCANF

名 前
書 式
説 明
変 換
返 り 値
エ ラ ー
属 性
準 拠
注 意
’a’ 代 入 割 り 当 て (assignment-allocation) 修 飾 子
バ グ

関 連 項 目
こ の 文 書 に つ い て

名 前

scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf - 書 式 付 き 入 力 変 換

書 式

#include <stdio.h>

int scanf(const char * format , ...);
int fscanf(FILE *
stream , const char * format , ...);
int sscanf(const char *
str , const char * format , ...);

#include <stdarg.h>

int vscanf(const char * format , va_list ap );
int vsscanf(const char *
str , const char * format , va_list ap );
int vfscanf(FILE *
stream , const char * format , va_list ap );

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 ( feature_test_macros (7) 参 照 ):

vscanf (), vsscanf (), vfscanf ():

_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L

説 明

scanf () 関 数 グ ル ー プ は 、 以 下 に 述 べ る よ う に 、 format に 従 っ て 入 力 を 読 み 込 む も の で あ る 。 こ の 書 式 に は 「 変 換 指 定 」 (conversion specifications) を 含 め る こ と が で き 、 変 換 指 定 が あ れ ば 、 そ の 変 換 の 結 果 は format に 続 く pointer 引 数 が 指 す 場 所 に 格 納 さ れ る 。 そ れ ぞ れ の pointer 引 数 の 型 は 、 対 応 す る 変 換 指 定 が 返 す 値 に 適 合 し て い な け れ ば な ら な い 。

format 中 の 変 換 指 定 の 個 数 が pointer 引 数 の 数 よ り 多 か っ た 場 合 の 結 果 は 未 定 義 で あ る 。 pointer 引 数 の 数 が 変 換 指 定 の 個 数 よ り も 多 か っ た 場 合 、 余 分 な pointer 引 数 の 評 価 は 行 わ れ る が 、 そ れ 以 外 は 行 わ れ ず 無 視 さ れ る 。

scanf () 関 数 は 標 準 入 力 ス ト リ ー ム stdin か ら の 入 力 を 読 み 込 む 。 fscanf () は ス ト リ ー ム ポ イ ン タ ー stream か ら の 入 力 を 読 み 込 む 。 sscanf () は 文 字 列 ポ イ ン タ ー str で 示 さ れ た 文 字 列 か ら の 入 力 を 読 み 込 む 。

vfscanf () 関 数 は vfprintf (3) と 同 様 に 、 ス ト リ ー ム ポ イ ン タ ー stream か ら の 入 力 を ポ イ ン タ ー の 可 変 長 引 数 リ ス ト を 用 い て 読 み 込 む ( stdarg (3) を 参 照 )。 vscanf () 関 数 は 、 可 変 長 引 数 の リ ス ト に 基 づ き 標 準 入 力 か ら の 読 み 取 り を 行 う 。 vsscanf () 関 数 は そ の リ ス ト に 基 づ き 文 字 列 か ら 読 み 取 る 。 こ れ ら の 関 係 は vprintf (3) と vsprintf (3) 関 数 の 関 係 と 同 様 で あ る 。

format 文 字 列 は 「 命 令 」 (directive) の 列 で 構 成 さ れ る 。 命 令 は 入 力 文 字 の 系 列 を ど の よ う に 処 理 す る か を 指 示 す る も の で あ る 。 あ る 命 令 の 処 理 が 失 敗 す る と 、 入 力 は そ れ 以 上 読 み 込 ま れ ず 、 scanf () は 返 る 。 「 失 敗 」 は 「 入 力 の 失 敗 」 (input failure) 「 一 致 の 失 敗 」 (matching failure) の い ず れ か で あ る 。 入 力 の 失 敗 は 入 力 文 字 が 使 用 で き な か っ た こ と を 意 味 し 、 一 致 の 失 敗 は 入 力 が 不 適 切 で あ っ た こ と (下 記 参 照 ) を 意 味 す る 。

命 令 は 以 下 の い ず れ か で あ る :

ホ ワ イ ト ス ペ ー ス (ス ペ ー ス 、 タ ブ 、 改 行 な ど ; isspace (3) 参 照 ) の 列 。 こ の 命 令 は 、 入 力 中 の 任 意 の 個 数 の ホ ワ イ ト ス ペ ー ス に 一 致 す る 。 (「 何 も な し 」 に も 一 致 す る )。

通 常 文 字 (つ ま り 、 ホ ワ イ ト ス ペ ー ス と '%' 以 外 の 文 字 )。 こ の 文 字 は 入 力 の 次 の 文 字 に 正 確 に 一 致 し な け れ ば な ら な い 。

変 換 指 定 。 変 換 指 定 は '%' (パ ー セ ン ト ) 文 字 で 始 ま る 。 入 力 さ れ た 文 字 の 系 列 は こ の 指 定 に も と づ い て 変 換 さ れ 、 変 換 結 果 は 対 応 す る pointer 引 数 が 指 す 場 所 に 格 納 さ れ る 。 入 力 の 次 の 文 字 が 変 換 指 定 と 一 致 し な い 場 合 は 、 変 換 は 失 敗 す る —こ れ が 「 一 致 の 失 敗 」 (matching failure) で あ る 。

format 中 の 各 々 の 「 変 換 指 定 」 は 文 字 '%' か 文 字 系 列 " % n $ " (違 い に つ い て は 後 述 ) で 始 ま り 、 以 下 の 要 素 が 続 く 。

代 入 抑 制 文 字 '*' (省 略 可 能 )。 scanf () は 変 換 指 定 に 指 示 さ れ た 通 り 入 力 を 読 み 込 む が 、 そ の 入 力 は 捨 て ら れ る 。 対 応 す る pointer 引 数 は 必 要 な く 、 scanf () が 返 す 代 入 が 成 功 し た 数 に こ の 指 定 は 含 ま れ な い 。

For decimal conversions, an optional quote character ('). This specifies that the input number may include thousands’ separators as defined by the LC_NUMERIC category of the current locale. (See setlocale (3).) The quote character may precede or follow the '*' assignment-suppression character.

文 字 'm' (省 略 可 能 )。 こ れ は 文 字 列 変 換 ( %s , %c , %[ ) と と も に 使 用 さ れ 、 こ れ を 使 う と 呼 び 出 し 元 が 入 力 を 保 持 す る 対 応 す る バ ッ フ ァ ー を 確 保 す る 必 要 が な く な る 。 代 わ り に scanf () が 必 要 な 大 き さ の バ ッ フ ァ ー を 確 保 し 、 こ の バ ッ フ ァ ー の ア ド レ ス を 対 応 す る pointer 引 数 に 代 入 す る 。 pointer 引 数 は char * 型 の 変 数 へ の ポ イ ン タ ー で な け れ ば な ら な い (変 数 自 体 は 呼 び 出 し 前 に 初 期 化 さ れ て い る 必 要 は な い )。 呼 び 出 し 元 は 、 不 要 に な っ た 時 点 で 、 こ の バ ッ フ ァ ー を free (3) す べ き で あ る 。

「 最 大 フ ィ ー ル ド 幅 」 を 指 定 す る 10進 数 (省 略 可 能 )。 こ の 最 大 値 に 達 す る か 、 一 致 し な い 文 字 が 見 つ か る か 、 の ど ち ら か に な る と 、 文 字 の 読 み 込 み を 停 止 す る 。 ほ と ん ど の 変 換 で は 、 先 頭 の ホ ワ イ ト ス ペ ー ス 文 字 は 捨 て ら れ (例 外 に つ い て は 後 述 す る )、 捨 て ら れ た こ れ ら の 文 字 は 最 大 フ ィ ー ル ド 幅 の 計 算 に は 含 ま れ な い 。 文 字 列 の 入 力 変 換 で は 、 入 力 の 末 尾 を 示 す 終 端 の ヌ ル バ イ ト ('\0') も 格 納 さ れ る が 、 最 大 フ ィ ー ル ド 幅 に は こ の 終 端 バ イ ト は 含 ま れ な い 。

「 型 修 飾 子 」 (type modifier characters) (省 略 可 能 )。 例 え ば 、 型 修 飾 子 l %d な ど の 整 数 変 換 と 一 緒 に 使 う と 、 対 応 す る pointer 引 数 が int で は な く long を 参 照 し て い る こ と を 指 定 で き る 。

「 変 換 指 定 」 : 実 行 す べ き 入 力 変 換 の 種 類 を 指 定 す る 。

format 中 の 変 換 指 定 は 、 '%' で 始 ま る か 、 " % n $ " で 始 ま る か の 、 い ず れ か の 形 式 で あ る 。 こ れ ら 2つ の 形 式 を 同 じ format 文 字 列 に 混 ぜ る こ と は で き な い 。 但 し 、 " % n $ " を 含 む 文 字 列 に %% %* を 含 め る こ と は で き る 。 format に '%' 指 定 が 含 ま れ て い る 場 合 、 各 々 の '%' 指 定 と 後 続 の pointer 引 数 は そ の 順 番 通 り に 対 応 す る 。 " % n $ " 形 式 (POSIX.1-2001 で は 規 定 さ れ て い る が 、 C99 に は な い ) で は 、 n は 10進 数 で あ り 、 変 換 後 の 入 力 を format の 後 ろ の n 番 目 の pointer 引 数 が 参 照 す る 場 所 に 格 納 す る こ と を 指 定 す る 。

変 換

変 換 指 定 に は 、 以 下 の 「 型 修 飾 子 」 を 入 れ る こ と が で き る 。

h

変 換 が d , i , o , u , x , X , n の い ず れ か で あ り 、 次 の ポ イ ン タ ー が ( int で は な く ) short unsigned short へ の ポ イ ン タ ー で あ る こ と を 示 す 。

hh

h と 同 じ だ が 、 次 の ポ イ ン タ ー が signed char unsigned char へ の ポ イ ン タ ー で あ る こ と を 示 す 。

j

h と 同 じ だ が 、 次 の ポ イ ン タ ー が intmax_t uintmax_t へ の ポ イ ン タ ー で あ る こ と を 示 す 。 こ の 修 飾 子 は C99 で 導 入 さ れ た 。

l

変 換 が d , i , o , u , x , X , n n の い ず れ か で あ り 次 の ポ イ ン タ ー が ( int で は な く ) long unsigned long へ の ポ イ ン タ ー で あ る こ と 、 ま た は 、 変 換 が e , f , g の う ち の ひ と つ で あ り 次 の ポ イ ン タ ー が ( float で は な く ) double へ の ポ イ ン タ ー で あ る こ と の い ず れ か で あ る こ と を 示 す 。 l 文 字 を 二 つ 指 定 す る と 、 L と 同 じ 意 味 と な る 。 %c %s と と も に 使 用 す る と 、 パ ラ メ ー タ ー は そ れ ぞ れ ワ イ ド 文 字 や ワ イ ド 文 字 列 へ の ポ イ ン タ ー で あ る と み な さ れ る 。

L

e , f , g 変 換 で 、 次 の ポ イ ン タ ー が long double へ の ポ イ ン タ ー で あ る こ と を 示 す 。 も し く は 、 d , i , o , u , x 変 換 で 、 次 の ポ イ ン タ ー が long long へ の ポ イ ン タ ー で あ る こ と の い ず れ か で あ る こ と を 示 す 。

q

L と 同 一 で あ る 。 こ の 修 飾 子 は ANSI C に は 存 在 し な い 。

t

h と 同 様 だ が 、 次 の ポ イ ン タ ー が ptrdiff_t へ の ポ イ ン タ ー で あ る こ と を 示 す 。 こ の 修 飾 子 は C99 で 導 入 さ れ た 。

z

h と 同 様 だ が 、 次 の ポ イ ン タ ー が size_t へ の ポ イ ン タ ー で あ る こ と を 示 す 。 こ の 修 飾 子 は C99 で 導 入 さ れ た 。

以 下 の 「 変 換 指 定 子 」 が 利 用 可 能 で あ る 。

%

文 字 '%' に 対 応 す る 。 書 式 文 字 列 の 中 の %% は 単 一 の 文 字 '%' に 対 応 す る 。 変 換 は 行 わ れ ず (但 し 、 先 頭 の ホ ワ イ ト ス ペ ー ス 文 字 は 捨 て ら れ る )、 変 数 へ の 代 入 は 生 じ な い 。

d

符 号 つ き の 10進 の 整 数 に 対 応 す る 。 次 の ポ イ ン タ ー は int へ の ポ イ ン タ ー で な け れ ば な ら な い 。

i

符 号 つ き 整 数 に 対 応 す る 。 次 の ポ イ ン タ ー は int へ の ポ イ ン タ ー で な け れ ば な ら な い 。 こ の 整 数 は 0x ま た は 0X で 開 始 す る 場 合 に は 16 進 数 、 0 で 開 始 す る 場 合 に は 8 進 数 、 そ の 他 の 場 合 に は 10進 数 と し て 読 み 込 ま れ る 。 こ の 変 換 で 使 用 さ れ る 文 字 は 、 こ れ ら の 基 数 に 対 応 し て い る も の だ け で あ る 。

o

符 号 な し の 8 進 の 整 数 に 対 応 す る 。 次 の ポ イ ン タ ー は unsigned int で な け れ ば な ら な い 。

u

符 号 な し の 10進 の 整 数 に 対 応 す る 。 次 の ポ イ ン タ ー は unsigned int へ の ポ イ ン タ ー で な け れ ば な ら な い 。

x

Matches an unsigned hexadecimal integer (that may optionally begin with a prefix of 0x or 0X , which is discarded); the next pointer must be a pointer to unsigned int .

X

x と 同 一 で あ る 。

f

符 号 つ き 浮 動 小 数 点 実 数 に 対 応 す る 。 次 の ポ イ ン タ ー は float へ の ポ イ ン タ ー で な け れ ば な ら な い 。

e

f と 同 一 で あ る 。

g

f と 同 一 で あ る 。

E

f と 同 一 で あ る 。

a

(C99) f と 同 一 で あ る 。

s

Matches a sequence of non-white-space characters; the next pointer must be a pointer to the initial element of a character array that is long enough to hold the input sequence and the terminating null byte ('\0'), which is added automatically. The input string stops at white space or at the maximum field width, whichever occurs first.

c

「 最 大 フ ィ ー ル ド 幅 」 (デ フ ォ ル ト は 1) で 指 定 さ れ た 幅 の 文 字 の 列 に 対 応 す る 。 次 の ポ イ ン タ ー は char へ の ポ イ ン タ ー で 、 す べ て の 文 字 を 格 納 す る の に 十 分 な 領 域 が な け れ ば な ら な い (終 端 の ヌ ル バ イ ト は 追 加 さ れ な い )。 通 常 行 わ れ る 先 頭 の ホ ワ イ ト ス ペ ー ス の 読 み 飛 ば し は 行 わ れ な い 。 先 頭 の ホ ワ イ ト ス ペ ー ス を 読 み 飛 ば す た め に は 、 フ ォ ー マ ッ ト 文 の 中 で 明 示 的 に ス ペ ー ス を 使 用 す れ ば 良 い 。

[

格 納 さ れ た 文 字 列 の う ち か ら 取 り 出 さ れ た 、 指 定 さ れ た 文 字 の 集 合 で 構 成 さ れ る 空 で は な い 文 字 の 列 に 対 応 す る 。 次 の ポ イ ン タ ー は char へ の ポ イ ン タ ー で な け れ ば な ら ず 、 そ こ に は 文 字 列 中 の す べ て の 文 字 と 終 端 の ヌ ル バ イ ト を 格 納 す る た め の 十 分 な 領 域 が な け れ ば な ら な い 。 通 常 行 わ れ る 先 頭 の ホ ワ イ ト ス ペ ー ス の 読 み 飛 ば し は 行 わ れ な い 。 こ の 文 字 列 は 特 別 な 集 合 の 中 の 文 字 で 構 成 さ れ て い る 。 こ の 集 合 は 開 き 括 弧 [ と 閉 じ 括 弧 ] の 間 の 文 字 で 定 義 さ れ る 。 開 き 括 弧 の あ と の 最 初 の 文 字 が 曲 ア ク セ ン ト 記 号 ( ^ ) の 場 合 、 集 合 は こ れ ら の 文 字 を 含 ま な い も の と な る 。 閉 じ 括 弧 を 集 合 に 含 ま せ る た め に は 、 こ の 文 字 を 開 き 括 弧 ま た は 曲 ア ク セ ン ト 記 号 の あ と の 最 初 の 文 字 に す れ ば よ い 。 つ ま り 、 他 の 位 置 に 閉 じ 括 弧 を 置 く と 文 字 の 集 合 が 終 る 。 ハ イ フ ン - も ま た 特 殊 文 字 で あ る 。 二 つ の 異 な る 文 字 の 間 に 置 か れ た 時 、 こ の 文 字 は 、 そ の 間 に あ る 全 て の 文 字 を 集 合 に 加 え る 。 ハ イ フ ン 自 体 を 含 ま せ る た め に は 、 括 弧 が 閉 じ る 前 の 最 後 の 一 文 字 を ハ イ フ ン に す れ ば よ い 。 例 え ば 、 [^]0-9-] は 「 閉 じ 括 弧 、 0 〜 9、 ハ イ フ ン の 3 種 類 を 除 く 全 て の 文 字 」 の 集 合 を 意 味 す る 。 こ の 文 字 列 は 集 合 に 含 ま れ て い な い (曲 ア ク セ ン ト の 場 合 に は 含 ま れ る ) 文 字 の 出 現 ま た は 確 保 さ れ た 領 域 が 使 い 切 ら れ た 時 に 終 了 す る 。

p

( printf (3) の %p で 印 字 さ れ る よ う な ) ポ イ ン タ ー 値 に 対 応 す る 。 次 の ポ イ ン タ ー は void へ の ポ イ ン タ ー へ の ポ イ ン タ ー で な け れ ば な ら な い 。

n

Nothing is expected; instead, the number of characters consumed thus far from the input is stored through the next pointer, which must be a pointer to int . This is not a conversion and does not increase the count returned by the function. The assignment can be suppressed with the * assignment-suppression character, but the effect on the return value is undefined. Therefore %*n conversions should not be used.

返 り 値

成 功 す る と 、 こ れ ら の 関 数 は 、 一 致 と 代 入 が 成 功 し た 入 力 要 素 の 個 数 を 返 す 。 返 さ れ る 値 は 渡 さ れ た 変 換 の 個 数 よ り も 少 な い こ と も あ り 、 最 初 に 一 致 の 失 敗 が あ っ た 場 合 に は 0 に な る こ と も あ る 。

最 初 の 変 換 が 成 功 す る 前 に 入 力 の 最 後 に 達 し て 、 一 致 の 失 敗 が 起 こ っ た 場 合 に は 、 EOF が 返 さ れ る 。 ま た 、 読 み 込 み エ ラ ー が 発 生 し た 場 合 に も EOF が 返 さ れ る 。 読 み 込 み エ ラ ー の 場 合 に は 、 そ の ス ト リ ー ム の エ ラ ー 指 示 子 が セ ッ ト さ れ ( ferror (3) 参 照 )、 errno に エ ラ ー を 示 す 値 が セ ッ ト さ れ る 。

エ ラ ー

EAGAIN

stream に 対 応 す る フ ァ イ ル デ ィ ス ク リ プ タ ー が nonblocking と な っ て お り 、 読 み 込 み 操 作 は 停 止 (block) す る こ と に な る 。

EBADF

stream に 対 応 す る フ ァ イ ル デ ィ ス ク リ プ タ ー が 無 効 で あ る が 、 読 み 込 み 用 に オ ー プ ン さ れ て い な い 。

EILSEQ

入 力 さ れ た バ イ ト 列 が 有 効 な 文 字 を 構 成 し て い な い 。

EINTR

読 み 込 み 操 作 が シ グ ナ ル に よ り 割 り 込 ま れ た 。 signal (7) 参 照 。

EINVAL

引 数 が 十 分 で な い 。 ま た は format が NULL で あ る 。

ENOMEM

メ モ リ ー 不 足 。

ERANGE

整 数 変 換 の 結 果 が 、 対 応 す る 整 数 型 に 格 納 で き る サ イ ズ を 越 え て し ま う 。

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-19592-1.png

準 拠

fscanf (), scanf (), sscanf () 関 数 は C89, C99, POSIX.1-2001 に 準 拠 し て い る 。 こ れ ら の 標 準 で は 、 エ ラ ー ERANGE は 規 定 さ れ て い な い 。

q 指 定 子 は long long の 4.4BSD で の 記 述 方 法 で あ る 。 一 方 、 整 数 変 換 で の ll ま た は L の 使 用 は GNU で の 拡 張 で あ る 。

こ れ ら の 関 数 の Linux 版 は GNU libio ラ イ ブ ラ リ ー を 元 に し て い る 。 よ り 簡 潔 な 説 明 に は GNU libc (glibc-1.08) info 文 書 に 目 を 通 す こ と 。

注 意

’a’ 代 入 割 り 当 て (assignment-allocation) 修 飾 子

元 々 、 GNU C ラ イ ブ ラ リ (glibc) で は 、 a 文 字 に よ る 文 字 列 入 力 に 対 す る 動 的 割 り 当 て 変 換 指 定 子 (dynamic allocation conversion specifier) を (非 標 準 の 拡 張 と し て ) サ ポ ー ト し て い る 。 こ の 機 能 は 少 な く と も glibc 2.0 の 時 点 で は す で に 存 在 し て い る 。 し た が っ て 、 以 下 の よ う に し て 、 scanf () に 入 力 文 字 列 に 対 し て バ ッ フ ァ ー を 割 り 当 て さ せ る こ と が で き る 。 割 り 当 て ら れ た バ ッ フ ァ ー は *buf で 返 さ れ る 。

char *buf;
scanf("%as", &buf);

こ の 目 的 で 文 字 a を 使 う の は 問 題 を は ら ん で い る 。 な ぜ な ら 、 a は ISO C 標 準 で は (浮 動 小 数 点 入 力 を 表 す ) の f の 同 義 語 と し て 定 義 さ れ て い る か ら で あ る 。 そ の 代 わ り 、 POSIX.1-2008 で は 、 (上 記 の 「 説 明 」 に 書 か れ て い る 通 り ) 代 入 割 り 当 て を 行 う 修 飾 子 と し て m が 規 定 さ れ て い る 。

a 修 飾 子 は gcc -std=c99 gcc -D_ISOC99_SOURCE で コ ン パ イ ル し た プ ロ グ ラ ム で は ( _GNU_SOURCE も 同 時 に 指 定 し て い な い 場 合 ) 利 用 で き な い 点 に 注 意 。 こ の 場 合 、 a は (上 述 の 通 り ) 浮 動 小 数 点 数 を 示 す 変 換 指 定 子 と 解 釈 さ れ る 。

m 修 飾 子 へ の 対 応 は バ ー ジ ョ ン 2.7 以 降 の glibc で 追 加 さ れ て い る 。 新 し い プ ロ グ ラ ム で は a の 代 わ り に m を 使 用 す べ き で あ る 。

POSIX で 標 準 化 さ れ て い る だ け で な く 、 m 修 飾 子 に は a を 利 用 す る 場 合 に 比 べ て 以 下 の よ う な 利 点 が あ る 。

*

%c 変 換 指 定 子 に も 適 用 で き る (例 え ば %3mc )。

*

浮 動 小 数 点 変 換 指 定 子 と し て の %a と の 紛 ら わ し さ が 避 け ら れ る (ま た gcc -std=c99 な ど の 影 響 も 避 け ら れ る )。

バ グ

全 て の 関 数 は 、 完 全 に C89 に 準 拠 し て い る 。 し か し 追 加 で q a 指 定 子 が 提 供 さ れ て お り 、 同 様 に L l 指 定 子 の 付 加 的 な 振 る 舞 い も あ る 。 後 者 は 、 C89 で 定 義 さ れ た 指 定 子 の 振 る 舞 い を 変 更 す る も の な の で 、 バ グ と み な さ れ る か も し れ な い 。

ANSI C で 定 義 さ れ た 型 修 飾 子 と 変 換 指 定 子 の 組 み 合 わ せ の 中 に は 意 味 を な さ な い も の が あ る (例 え ば 、 %Ld )。 こ れ ら が 指 定 さ れ た 場 合 、 Linux 上 で は は っ き り と 定 義 さ れ た 振 る 舞 い を す る か も し れ な い が 、 他 の ア ー キ テ ク チ ャ ー で も 同 様 に な っ て い る と は 限 ら な い 。 そ れ ゆ え に 、 ほ と ん ど の 場 合 、 ANSI C で 定 義 さ れ て い な い 修 飾 子 を 使 用 し た 方 が 良 い 。 す な わ ち 、 d , i , o , u , x , X 変 換 や ll と 組 み 合 わ せ る 場 合 に は 、 L の 代 わ り に q を 使 用 し た 方 が 良 い 。

q の 使 用 方 法 は 4.4BSD と 同 じ で は な い 。 4.4BSD で は q L と 同 等 に 浮 動 小 数 の 変 換 に 使 用 さ れ る 。

動 的 割 り 当 て 変 換 指 定 子 を 使 用 す る に は 、 長 さ 修 飾 子 と し て m を 指 定 す る (つ ま り 、 全 体 と し て は %ms %m[ range ] と な る )。 以 下 の 例 に あ る よ う に 、 呼 び 出 し 側 は 返 さ れ た 文 字 列 を free (3) し な け れ ば な ら な い 。

char *p;
int n;

errno = 0;
n = scanf("%m[a-z]", &p);
if (n == 1) {
printf("read: %s\n", p);
free(p);
} else if (errno != 0) {
perror("scanf");
} else {
fprintf(stderr, "No matching characters\n");
}

上 記 の 例 に あ る よ う に 、 scanf () が 文 字 列 の 読 み 込 み に 成 功 し た 場 合 に だ け 、 free (3) を 呼 び 出 す 必 要 が あ る 。

関 連 項 目

getc (3), printf (3) setlocale (3), strtod (3), strtol (3), strtoul (3),

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。