std::vscanf, std::vfscanf, std::vsscanf
| ヘッダ <cstdio> で定義
|
||
int vscanf( const char* format, va_list vlist ); |
(1) | (C++11以上) |
int vfscanf( std::FILE* stream, const char* format, va_list vlist ); |
(2) | (C++11以上) |
int vsscanf( const char* buffer, const char* format, va_list vlist ); |
(3) | (C++11以上) |
様々なソースからデータを読み込み、それを format に従って解釈し、結果を vlist によって定義される位置に格納します。
stream からデータを読み込みます。buffer からデータを読み込みます。引数
| stream | - | 読み込む入力ファイルストリーム | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| buffer | - | 読み込むヌル終端文字列を指すポインタ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| format | - | 入力の読み込み方法を指定するヌル終端文字列を指すポインタ。
書式文字列は以下から構成されます。
以下の書式指定子が利用できます。
長さ指定子 変換指定子 固定幅の整数型に対する正しい変換指定は、ヘッダ <cinttypes> で定義されています (SCNdMAX, SCNuMAX などは 変換指定子それぞれの動作後に副作用完了点があります。 これにより同じ「ゴミ箱」変数に複数のフィールドを格納することができます。 数字のない指数で終わる不完全な浮動小数点値をパースするとき、例えば変換指定子 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| vlist | - | 受け取り引数を格納している可変長引数リスト | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
戻り値
読み込みに成功した引数の数、または失敗した場合は EOF。
ノート
これらのすべての関数は va_arg を少なくとも1回は呼び、戻った後 arg の値は不定になります。 これらの関数は va_end を呼ばす、それは呼び出し元が行わなければなりません。
例
#include <iostream>
#include <cstdio>
#include <cstdarg>
#include <stdexcept>
void checked_sscanf(int count, const char* buf, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
if(std::vsscanf(buf, fmt, ap) != count)
throw std::runtime_error("parsing error");
va_end(ap);
}
int main()
{
try {
int n, m;
std::cout << "Parsing '1 2'...";
checked_sscanf(2, "1 2", "%d %d", &n, &m);
std::cout << "success\n";
std::cout << "Parsing '1 a'...";
checked_sscanf(2, "1 a", "%d %d", &n, &m);
std::cout << "success\n";
} catch(const std::exception& e)
{
std::cout << e.what() << '\n';
}
}
出力:
Parsing '1 2'...success
Parsing '1 a'...parsing error
関連項目
| stdin、ファイルストリームまたはバッファから書式付き入力を行います (関数) | |
| 可変個引数リストを使用して stdout、ファイルストリームまたはバッファに書式付き出力を行います (関数) | |
vscanf, vfscanf, vsscanf の C言語リファレンス
| |