0

2 つのコマンド ライン引数が必要なこのコードを変更する必要があります。

  if (argc == 3){
   host = argv[1];
    port = atoi(argv[2]);
      else {
    fprintf(stderr, "usage error: incorrect number of arguments\n");

任意の順序で 3 つのオプションのコマンド ライン引数 (ユーザー名、サーバー ホスト番号、サーバー ポート番号) を指定します。このように記述しますが、うまくいきません。

  if (argc<1 || argc>4)
    fprintf(stderr, "usage error: incorrect number of arguments\n");
else 
    for(int i=1;i<=argc;i++)
    {
        if (strcmp( argv[i],"-u"==0 )
             username=argv[i];
        if(strcmp(argv[i],"-p"==0)
            port=atoi(argv[i]);
        if (strcmp(avrgv[i],"-h"==0)
            host=(argv[i]);
4

2 に答える 2

1

を使用getoptしてください。これは、コマンドライン引数を一貫した方法で処理するために構築されたものであり、正しく行うのが難しいことで有名です。

于 2013-01-23T02:07:18.450 に答える
0

オプションをバイパスして引数の値を取得するには、インデックスを増やす必要があります。たとえば、コードを次のように変更します。

   if (argc<1 || argc>4)
        fprintf(stderr, "usage: %s -u username\n", argv[0]);
    else 
        for(int i=1;i<=argc;i += 2)
        {
            if (strcmp( argv[i],"-u")==0 )
                 username=argv[i + 1];

usernameまた、配列として定義し、char引数値をそれにコピーすることをお勧めします。これにより、次のように直接変更できます。

char username[NAME_LEN + 1];                            // +1 for tailing '\0'
strncpy(username, argv[i + 1], NAME_LEN);
于 2013-01-23T02:13:11.453 に答える