1

こんにちは、C の初心者で、このラボを開始しようとしています。コマンド構文は、最初にコマンド ライン フラグを一覧表示し、次に 1 つ以上のファイル名を一覧表示します。

入力引数をスキャンする方法を整理し、フラグとファイル名を区別するのに苦労しています。

ループを実行して、引数がフラグかファイル名かを確認することを考えました。しかし、それを実装する方法がわかりません。最初の 4 つの引数は任意の順序でフラグになる可能性があるため、その後はファイル名になります。しかし、フラグを指定せずにファイル名だけで開始することも可能です。このループを初期化して各引数を 1 つずつ処理する方法がまったくわかりません。

可能なコマンド ライン引数の例:

wc fcopy.c head.c (no flags given just file names)
wc -l -c -w -L fcopy.c head.c a.exe (flags given and multiple files)
wc -l -w -c -L fcopy.c (flags given and 1 file name)
4

4 に答える 4

2

getopt()を使用できます

次の質問を確認してください。
コマンドライン引数を解析しますか?
Cでの引数の前後のコマンドラインオプションの処理
C/UNIXの引数解析ヘルパー
Getoptshiftoptarg

于 2012-09-18T03:06:01.340 に答える
2

チェックアウトしてくださいgetopt。コマンドライン引数とそのフラグを解析できます。

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main (int argc, char **argv)
{
  int aflag = 0;
  int bflag = 0;
  char *cvalue = NULL;
  int index;
  int c;

  opterr = 0;

  while ( (c = getopt (argc, argv, "abc:")) != -1 )
    switch (c) {
      case 'a':
        aflag = 1;
        break;
      case 'b':
        bflag = 1;
        break;
      case 'c':
        cvalue = optarg;
        break;
      case '?':
        if (optopt == 'c')
          fprintf (stderr, "Option -%c requires an argument.\n", optopt);
        else if (isprint (optopt))
          fprintf (stderr, "Unknown option `-%c'.\n", optopt);
        else
          fprintf (stderr,
                   "Unknown option character `\\x%x'.\n",
                   optopt);
        return 1;
      default:
        abort ();
      }

  printf ("aflag = %d, bflag = %d, cvalue = %s\n",
          aflag, bflag, cvalue);

  for (index = optind; index < argc; index++)
    printf ("Non-option argument %s\n", argv[index]);
  return 0;
}

getoptを使用した引数の解析例

于 2012-09-18T03:06:48.793 に答える
2

コマンドライン引数を 1 つずつ読み取るのは非常に簡単です。

int main( int argc, // Number of strings in array argv char *argv[])

C 関数の 2 つの基本的な引数は、argc (引数の int 数) と argv (引数の文字列の配列) です。

最初の文字列は常に実行中のプログラムの名前で、その後にコマンド ラインで渡された引数が続きます。

if(argc > 1)
    for( count = 1 count < argc; count++ )
        printf("%s", argv[count]);

呼び出しプログラムの名前の後に渡された各引数を画面に表示します。あなたのフラグは最初の文字として「-」で渡されると思いますか?その場合は、各文字列の最初の文字の内容で「-」をチェックして、フラグかどうかを確認できます。

于 2012-09-18T03:16:55.167 に答える
0

http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.htmlも参照してください。

于 2012-09-18T03:05:49.783 に答える