0

Cのためにいくつかの議論をしようとしている間、私はargv[]仕事に取り掛かるのが本当に難しいことに気づきました。私は持っています:

int main(int argc, char *argv[])
{
  void updateNext();
  void fcfs();
  void spn();
  void srt();

  fp = fopen(argv[0],"r");
  op = fopen("output.dat","a+");

  if (strcmp(argv[1],"FCFS")!=0)
  {
    fcfs();
  }

  if (strcmp(argv[1],"SPN")!=0)
  {
    spn();
  }

  if (strcmp(argv[1],"SRT")!=0)
  {
    srt();
  }
}

の形式で何かを入力したいのですmyprog input.data FCFSが、上記のコードでは「浮動小数点例外」のエラーが発生しますinput.dat。プログラムで文字列としてハードコーディングすると、例外がなくなります。argv[0]おそらく何か問題がありますか?

4

2 に答える 2

7

Cでは、argv[0]プログラムの名前です(より正確には、シェルから実行する場合は、ユーザーがプログラムを実行するためにコマンドラインで入力した最初の単語)。

したがって、argv[0]目的を回避するためにargv[1]、ファイル名とargv[2]その他のパラメーターを確認する必要があります。

これは、デバッガーを使用してプログラムをトレースした場合、または使用する前に値を出力した場合は明らかでした。

printf("using file name %s\n", argv[0]);
fp = fopen(argv[0],"r");

argcアクセスする前に検証して、十分なコマンドラインパラメータがあることを確認することもお勧めしますargv

if (argc < 3) {
    fprintf(stderr, "not enough command line parameters\n");
    exit(1);
}
于 2012-04-04T19:08:44.160 に答える
5

Cargv[0]では、通常、プログラムが呼び出されたときの名前です。あなたが探している argv[1]argv[2]

補足として:

  • argc触れる前に確認する必要がありますargv
  • argv[0]プログラムの名前や賢明なものが含まれているという保証はありません
于 2012-04-04T19:08:35.257 に答える