Skip to content

Latest commit

 

History

History
81 lines (61 loc) · 2.31 KB

vsscanf.md

File metadata and controls

81 lines (61 loc) · 2.31 KB

vsscanf

  • cstdio[meta header]
  • std[meta namespace]
  • function[meta id-type]
  • cpp17[meta cpp]
namespace std {
  int vsscanf(const char* buffer, const char* format, va_list arg);
}
  • va_list[link /reference/cstdarg/va_list.md]

概要

可変引数リストva_listを使用し、書式を指定して文字列領域から入力する。

引数を...で受け取るsscanf()と異なり、va_listとしてまとめられた可変引数を受け取る。可変引数を受け取る自作の関数から、書式付き入力を行いたい場合に使用する。

戻り値

sscanf()と同じ。

備考

  • この関数はva_endマクロを呼び出さないため、呼び出し側でargに対してva_endを実行する必要がある
  • C++17で、参照するC標準ライブラリがC99からC11へ更新されたことにともなって追加された

例

#include <cstdio>
#include <cstdarg>

// 可変引数を受け取り、文字列を解析する関数
int parse(const char* input, const char* format, ...)
{
  std::va_list args;
  va_start(args, format);
  int count = std::vsscanf(input, format, args);
  va_end(args);
  return count;
}

int main()
{
  int year = 0;
  int month = 0;
  int day = 0;
  int count = parse("2026-09-08", "%d-%d-%d", &year, &month, &day);

  std::printf("%d: %d/%d/%d\n", count, year, month, day);
}
  • std::vsscanf[color ff0000]
  • std::va_list[link /reference/cstdarg/va_list.md]
  • va_start[link /reference/cstdarg/va_start.md]
  • va_end[link /reference/cstdarg/va_end.md]
  • std::printf[link printf.md]

出力

3: 2026/9/8

処理系

備考

  • Visual C++は2019(Compiler Explorerで利用できる最古のバージョン)で動作を確認しており、それ以前のバージョンでも使用できる可能性がある

関連項目

参照