vsscanf | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


vsscanf関数

概要

文字列から、変換指定を伴った文字列を受け取る。

ヘッダ

stdio.h

形式

int vsscanf(const char* restrict s, const char* restrict format, va_list args);

引数

s

入力文字列。

format

変換指定を伴った文字列。

args

format に含まれている変換指定子に対応した、可変個引数リスト。

戻り値

変換を1つも行えないまま入力エラーが起きた場合は、EOF を返す。その他の場合には、正常に代入を行えた個数を返す。

詳細

引数… が va_list に変わっていること以外は、sscanf関数と同様であり、同じ機能を持つ。
変換指定の詳細については、scanf関数を参照。

注意

第2引数に渡す va_list型のオブジェクトは、事前に va_start による初期化が必要である。

必要な個数の実引数が指定されていない場合の動作は未定義。余分に指定されている場合には、評価は行われるが、vsscanf関数としては無視する。

この関数は内部で va_argマクロを呼び出すため、関数から戻った後の args の状態は不定である。

使用例
#include <stdio.h>
#include <stdarg.h>
#include <assert.h>

static void checked_input(const char* s, int count, const char* format, ...)
{
    va_list args;

    va_start(args, format);
    if (vsscanf(s, format, args) != count) {
        assert("vsscanf error");
    }
    va_end(args);
}

int main(void)
{
    const char s[] = "100 abc 2.5";

    int num;
    char str[10];
    double f;

    checked_input(s, 3, "%d %s %lf", &num, str, &f);
    printf("%d %s %lf\n", num, str, f);
}

実行結果:

100 abc 2.500000
関連

ワイド文字版の vswscanf関数がある。

任意のストリームに対して同様の変換指定を行い入力を受け取るには、vfscanf関数を使う。標準入力に特化した vscanf関数がある。

va_list の代わりに、… を用いたバージョンとして、sscanf関数がある。
解説章


参考リンク 🔗

本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place 管理者に紹介料が支払われています。


更新履歴 🔗

 全体的に文章を見直し修正。

 C言語編全体で表記を統一するため、「フォーマット指定」を「変換指定」に改めた。

 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る