C++ でコマンドライン引数を取得する

胡金庫 2023年10月12日
  1. C++ で int main(int argc, char *argv[]) 表記を使用してコマンドライン引数を取得する
  2. C++ で int main(int argc, char **argv) 表記を使用してコマンドライン引数を取得する
  3. C++ で while ループを使ってコマンドライン引数を出力する
C++ でコマンドライン引数を取得する

この記事では、C++ でコマンドライン引数を取得する方法のいくつかの方法について説明します。

C++ で int main(int argc, char *argv[]) 表記を使用してコマンドライン引数を取得する

コマンドライン引数は、実行の開始時にプログラムに渡すことができる文字列値です。通常、これらの引数は、CLI のみのインターフェイスを持つプログラムによって広く利用されています。Unix コマンドラインユーティリティ。C++ プログラムには、コマンドライン引数にアクセスするための特別な main 関数定義が必要であることに注意してください。つまり、main 関数には、パラメータを-(int argc, char *argv[]) として含める必要があります。argc パラメータは、プログラム名自体を含む、プログラムに渡された引数の総数を表します。一方、argv は、引数値を表す文字列の配列を格納します。これには、配列表記-argv[0] を使用してアクセスできます。char ポインタの配列は 0 で終了することが保証されていることに注意してください。

次の例は、各引数値をコンソールに出力するための for ループの基本的な使用法を示しています。ただし、前述の if ステートメントは、プログラムに引数が指定されていることを確認してから、実行を続行することに注意してください。

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[]) {
  if (argc < 2) {
    cerr << "No program parameters provided !" << endl;
    exit(EXIT_FAILURE);
  }

  for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);

  exit(EXIT_SUCCESS);
}

C++ で int main(int argc, char **argv) 表記を使用してコマンドライン引数を取得する

有効で前のものとまったく同じように動作する別の main 関数プロトタイプがあるので、次の表記が発生したときに混乱がないことを確認するためにそれを含めます-int main(int argc, char **argv)。要素へのアクセスも同じ方法で行われ、for ループを使用して要素をトラバースできることに注意してください。

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char **argv) {
  if (argc < 2) {
    cerr << "No program parameters provided !" << endl;
    exit(EXIT_FAILURE);
  }

  for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);

  exit(EXIT_SUCCESS);
}

C++ で while ループを使ってコマンドライン引数を出力する

引数値にアクセスする別の方法は、ゼロになるまで argv ポインターを逆参照することです。argv 配列はゼロ値で終了することが保証されていることに注意してください。これを利用して、while ループを実装し、配列をトラバースして引数値を 1つずつ出力できます。以下の if ステートメントの printf 呼び出しは、十分な引数がプログラムに渡されなかったというエラーレポーターとして機能することに注意してください。興味深いのは、プログラム名が argv[0] 表記と%s 指定子で取得されるため、名前が変更されるたびにハードコーディングするよりも柔軟な方法になることです。

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[]) {
  if (argc < 4) {
    printf("Usage: ./%s arg1 arg2 arg3\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  while (*argv) {
    cout << *argv << endl;
    argv += 1;
  }

  exit(EXIT_SUCCESS);
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook