4

私がこれを持っている場合:

int main(int argc, char *argv[])

本文では、 を使用してプログラムを見つけることがありますargv[1]

argv[1]overはいつ使うのargv[0]ですか?コマンド ラインの2 番目の引数を読み取りたい場合だけですか?

4

7 に答える 7

12

慣例によりargv[0]現在のプログラムの名前(またはパス) であり、argv[1]~argv[argc - 1]はユーザーが指定するコマンドライン引数です。

ただし、これは必ずしも真実である必要はありません。プログラムは OS 固有の機能を使用してこの要件を回避できます。これは頻繁に発生するため、注意が必要です。(意識していてもできることが多いかどうかはわかりませんが…)

例:

gcc -O3 -o temp.o "My file.c"

次の引数を生成します (生成する必要があります)。

argc: 5
argv: ["gcc", "-O3", "-o", "temp.o", "My file.c"]

つまり、 ではなくargv[0]指します。gcc-O3

于 2011-03-07T08:28:06.237 に答える
6

argvはポインターの配列であり、この配列内の各ポインターは、コマンド ラインからの 1 つの引数を格納します。最初の引数 (つまりargv[0]、実行可能ファイル/プログラム自体)argv[1]も、2 番目の引数も同様です!

引数の総数は によって決定されargcます。

于 2011-03-07T08:27:56.533 に答える
2

argv[0] はプログラムの実行パス、argv[1] はプログラムの最初のパラメーターです。

于 2011-03-07T08:26:51.777 に答える
2

C++実行可能ファイルが次のようになっているとします。

/home/user/program(またはC:\program.exeWindows の場合)

あなたが実行した場合:

./home/user/program 1 2(またはC:\program.exe 1 2Windows の場合)

argv[0] = /home/user/program( C:\program.exe)
argv[1] = 1
argv[2] = 2

その理由は次のとおりです。

  • argv[0]実行可能ファイルのパスです
  • argv[1]は第 1 引数です

編集:

argv[0]必ずしも実行可能ファイルのパスではないことがわかりました。
次の SO の質問を読んでください: args[0] は実行パスであることが保証されていますか?

于 2011-03-07T08:26:55.210 に答える
0

はい、ほとんどそれargv[1]です。2 番目のコマンド ライン パラメータです。最初のコマンド ライン パラメータは、プログラム自体の名前です。

または、この回答が元々持っていたセマンティックな混乱と他の人からのコメントを避けるために、argv[0] をゼロ番目のパラメーターと呼ぶのが理にかなっているかもしれませんargv[1]

exec()いずれにせよ、これは関数のファミリーに由来します。たとえば、execl使用法があります。

 int execl(const char *path, const char *arg0, ... /*, (char *)0 */);

(Unix) シェルでコマンドを入力すると、必要に応じて、シェルは最初にコマンド名を解決し (を使用して$PATH)、実際の絶対パスを見つけます。(絶対または相対) パスが に提供されpath、最初に入力されたコマンドが として提供されarg0、最終的にargv[0]プログラムに組み込まれます。

残りのコマンドライン パラメータはargv[1]、 などになります。

于 2011-03-07T08:26:11.397 に答える
0

簡単な答えはイエスです。配列には、プログラムに渡されたすべてのオプションが含まれています。

于 2011-03-07T08:26:38.837 に答える
0

argv[0] はプログラム自体のファイルパスであるため。追加のコマンド ライン パラメーターは、さらにインデックス argv[1]、argv[2] にあります。詳細については、 http ://www.site.uottawa.ca/~lucia/courses/2131-05/labs/Lab3 をご覧ください/CommandLineArguments.html

于 2011-03-07T08:28:27.130 に答える