C++ でコマンドライン引数を取得する
-
C++ で
int main(int argc, char *argv[])
表記を使用してコマンドライン引数を取得する -
C++ で
int main(int argc, char **argv)
表記を使用してコマンドライン引数を取得する -
C++ で
while
ループを使ってコマンドライン引数を出力する
この記事では、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);
}